84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
如何检测NSString在Objective-C里是否为空?
原问题:How do I test if a string is empty in Objective C?
光阴似箭催人老,日月如移越少年。
Marc Charbonneau 可以檢查是否[string length] == 0。這將檢查它是否是一個有效但是為空的字串(@"")以及其是否為無值。因為呼叫無值的length也會回傳0。
Matt G 樓上的答案是正確的。但我想藉此機會介紹一下Wil Shipley總結的isEmpty,他分享在blog上的:
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); }
第一種方法是有效地,但是如果字串有空格(@" ")的話就買不起作用了。所以必須在測試前清除空格。 下面的程式碼能夠清除字串兩邊的所有空格
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
有個不錯的方法是定義一個宏,這樣你就不用輸入這一長串程式碼了:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
現在你可以使用:
NSString *emptyString = @" "; if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
Rob 我見過的最好的解決方法之一(比Matt G的更好)這種改進的內聯函數,我在Git Hub報告中找到的:
// 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 你最好使用這個函數:
@implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0); } @end
chown 另一個選擇是使用isEqualToString檢查是否等於@"",就像這樣:
if ([myString isEqualToString:@""]) { NSLog(@"myString IS empty!"); } else { NSLog(@"myString IS NOT empty, it is: %@", myString); }
Jim Thio 我用的這個:
@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:
<strong>if([yourString isEqualToString:@""]){ // yourString is empty. } else { // yourString has some text on it. } </strong>
方法 2:
if([yourString length] == 0){ // Empty yourString } else { // yourString is not empty }
Marc Charbonneau
可以檢查是否[string length] == 0。這將檢查它是否是一個有效但是為空的字串(@"")以及其是否為無值。因為呼叫無值的length也會回傳0。
Matt G
樓上的答案是正確的。但我想藉此機會介紹一下Wil Shipley總結的isEmpty,他分享在blog上的:
第一種方法是有效地,但是如果字串有空格(@" ")的話就買不起作用了。所以必須在測試前清除空格。
下面的程式碼能夠清除字串兩邊的所有空格
有個不錯的方法是定義一個宏,這樣你就不用輸入這一長串程式碼了:
現在你可以使用:
Rob
我見過的最好的解決方法之一(比Matt G的更好)這種改進的內聯函數,我在Git Hub報告中找到的:
user238824
你最好使用這個函數:
chown
另一個選擇是使用isEqualToString檢查是否等於@"",就像這樣:
Jim Thio
我用的這個:
問題是如果self無值, 這個功能就永遠不會被呼叫。它將返回false,這是所需的。
Samir Jwarchan
使用下面的if else條件之一就可以:
方法1:
方法 2: