如何检测字符串在Obj-C里是否为空?

本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术。本文将为读者讲解如何检测字符串在Objective-C里是否为空。

问题:

Jamey McElveen

如何检测NSString在Objective-C里是否为空?

答案:

Marc Charbonneau

可以检查是否[string length] == 0。这将检查它是否是一个有效但是为空的字符串(@"")以及其是否为无值。因为调用无值的length也将返回0。

Matt G

楼上的回答是正确的。但是我想借此机会介绍一下Wil Shipley总结的isEmpty,他分享在blog上的:

1
2
3
4
5
6
7
static inline BOOL IsEmpty(id thing) {
return thing == nil
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}

第一种方法是有效地,但是如果字符串有空格(@" ")的话就买不起作用了。所以必须在测试前清除空格。

下面的代码能够清除字符串两边的所有空格

1
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

有个不错的方法是定义一个宏,这样你就不用输入这一长串代码了:

1
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]

现在你可以使用:

1
2
NSString *emptyString = @ "   " ;
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@ "Is empty!" );
Rob

我见过的最好的解决方法之一(比Matt G的更好)这种改进的内联函数,我在Git Hub报告里找到的:

1
2
3
4
5
6
7
8
9
// Check if the "thing" pass'd is empty
static inline BOOL isEmpty(id thing) {
     return thing == nil
     || [thing isKindOfClass:[NSNull class]]
     || ([thing respondsToSelector:@selector(length)]
         && [(NSData *)thing length] == 0)
     || ([thing respondsToSelector:@selector(count)]
         && [(NSArray *)thing count] == 0);
}

user238824

你最好使用这个函数:

1
2
3
4
5
6
7
@implementation NSString (Empty)
 
     - (BOOL) empty{
         return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
     }
 
@end

chown 

另一个选择是使用isEqualToString检查是否等于@"",就像这样:

1
2
3
4
5
if ([myString isEqualToString:@ "" ]) {
     NSLog(@ "myString IS empty!" );
} else {
     NSLog(@ "myString IS NOT empty, it is: %@" , myString);
}
Jim Thio

我用的这个:

1
2
3
4
5
6
7
8
9
10
11
12
@implementation NSObject (AdditionalMethod)
-(BOOL) isNotEmpty
{
     return !(self == nil
     || [self isKindOfClass:[NSNull class]]
     || ([self respondsToSelector:@selector(length)]
         && [(NSData *)self length] == 0)
     || ([self respondsToSelector:@selector(count)]
         && [(NSArray *)self count] == 0));
 
};
@end

问题是如果self无值, 这个功能就永远不会被调用。它将返回false,这是所需的。

Samir Jwarchan

使用下面的if else条件之一就可以:

方法1:

1
2
3
4
5
6
<strong> if ([yourString isEqualToString:@ "" ]){
         // yourString is empty.
     }
     else {
         // yourString has some text on it.
     } </strong>

方法 2:

1
2
3
4
5
6
if ([yourString length] == 0){
     // Empty yourString
}
else {
     // yourString is not empty
}

原文链接:stackoverflow

文章选自StackOverFlow社区,鉴于其内容对于开发者有所帮助,现将文章翻译于此,供大家参考及学习。9Tech将每日持续更新,读者可点击StackOverflow(简称:SOF)精选问答汇总,查看全部译文内容。同时,我们也招募志同道合的技术朋友共同翻译,造福大家!报名请发邮件至zhangqi_wj#cyou-inc.com。(#换成@)

 

你可能感兴趣的:(字符串)