关于ios:如何在Objective-C中测试字符串是否为空?

How do I test if a string is empty in Objective-C?

如何测试Objective-C中的NSString是否为空?


你可以检查一下[string length] == 0。这将检查它是否是有效但空的字符串(@),以及它是否为零,因为在nil上调用length也将返回0。


马克的回答是正确的。但我将借此机会包括一个指向WilShipley的广义isEmpty的指针,他在他的博客中分享了:

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
3
NSString *emptyString = @"  ";

if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");


我见过的最好的解决方案之一(比Matt G的解决方案更好)是我在一些Git Hub回购(Wil Shipley的一个,但我找不到链接)上使用的改进的内联函数:

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);
}


您最好使用以下类别:

1
2
3
4
5
6
7
@implementation NSString (Empty)

    - (BOOL) isWhitespace{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }

@end


只需将字符串传递给以下方法:

1
2
3
4
5
6
7
+(BOOL)isEmpty:(NSString *)str
{
    if(str.length==0 || [str isKindOfClass:[NSNull class]] || [str isEqualToString:@""]||[str  isEqualToString:NULL]||[str isEqualToString:@"(null)"]||str==nil || [str isEqualToString:@"<null>"]){
        return YES;
    }
    return NO;
}


我这样说:

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为nil,则从不调用此函数。它将返回false,这是需要的。


另一种选择是检查它是否等于@"",与isEqualToString:类似:

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

斯威夫特版本

尽管这是一个客观的C问题,但我需要在swift中使用NSString,因此我也将在这里给出一个答案。

1
2
3
4
5
let myNSString: NSString =""

if myNSString.length == 0 {
    print("String is empty.")
}

或者如果NSString是可选的:

1
2
3
4
5
6
7
8
9
10
11
12
var myOptionalNSString: NSString? = nil

if myOptionalNSString == nil || myOptionalNSString!.length == 0 {
    print("String is empty.")
}

// or alternatively...
if let myString = myOptionalNSString {
    if myString.length != 0 {
        print("String is not empty.")
    }
}

正常的Swift String版本是

1
2
3
4
5
let myString: String =""

if myString.isEmpty {
    print("String is empty.")
}

另请参见:在swift中检查空字符串?


只需使用一个ifelse条件,如下所示:

方法1:

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

方法2:

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

可能这个答案是已经给出答案的副本,但是我在检查条件的顺序上做了一些修改和更改。请参考以下代码:

1
2
3
4
5
6
7
+(BOOL)isStringEmpty:(NSString *)str
    {
        if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
            return YES;
       }
        return NO;
    }


您可以使用以下方法检查字符串是否为空:

1
2
3
4
5
6
7
8
9
10
+(BOOL) isEmptyString : (NSString *)string
{
    if([string length] == 0 || [string isKindOfClass:[NSNull class]] ||
       [string isEqualToString:@""]||[string  isEqualToString:NULL]  ||
       string == nil)
     {
        return YES;         //IF String Is An Empty String
     }
    return NO;
}

最佳实践是让一个共享类称为utilityClass,并添加这个方法,这样您就可以通过应用程序调用它来使用这个方法。


有两种方法可以检查字符串是否为空:

假设您的字符串名称是NSString *strIsEmpty

方法1:

1
2
3
4
5
6
7
8
9
if(strIsEmpty.length==0)
{
    //String is empty
}

else
{
    //String is not empty
}

方法2:

1
2
3
4
5
6
7
8
9
if([strIsEmpty isEqualToString:@""])
{
    //String is empty
}

else
{
    //String is not empty
}

选择上面的任何一个方法,并了解字符串是否为空。


只需检查你的绳子长度

1
2
3
4
 if (!yourString.length)
 {
   //your code  
 }

发送给nil的消息将返回nil或0,因此无需测试nil:。

快乐编码…


非常有用的帖子,添加nsdictionary支持以及一个小改动

1
2
3
4
5
6
7
8
9
static inline BOOL isEmpty(id thing) {
    return thing == nil
    || [thing isKindOfClass:[NSNull class]]
    || ([thing respondsToSelector:@selector(length)]
        && ![thing respondsToSelector:@selector(count)]
        && [(NSData *)thing length] == 0)
    || ([thing respondsToSelector:@selector(count)]
        && [thing count] == 0);
}


它对我来说很有魅力

如果NSStrings

1
2
3
4
5
6
7
8
9
if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {

    NSLog(@"s is empty");

} else {

    NSLog(@"s containing %@", s);

}

因此,除了检查长度小于1的字符串的基本概念外,还必须深入考虑上下文。人类或计算机或其他语言可能对空字符串有不同的定义,在这些相同的语言中,附加上下文可能进一步改变其含义。

假设空字符串表示"不包含当前上下文中任何重要字符的字符串"。

这可能意味着视觉上,颜色和背景颜色在属性化字符串中是相同的。实际上是空的。

这可能意味着没有有意义的字符。所有点、所有破折号或所有下划线都可以视为空。此外,没有有意义的重要字符可能意味着一个字符串没有读者能理解的字符。它们可以是语言中的字符,也可以是对读者没有意义的字符集。我们可以用不同的方式来定义它:在给定的语言中,字符串不构成已知的单词。

我们可以说空是所呈现字形中负空间百分比的函数。

即使一系列不可打印的字符没有一般的视觉表示,也不是真正的空字符。控制角色浮现在脑海中。尤其是低ASCII范围(我很惊讶没有人提到这些,因为它们使用了大量的系统,而不是空白,因为它们通常没有标志符号和视觉度量)。但字符串长度不是零。

结论。单是长度并不是这里唯一的度量标准。上下文集成员也是非常重要的。

字符集成员是一个非常重要的常见附加度量。有意义的序列也是一个相当常见的序列。(考虑seti或crypto或captchas)还存在其他更抽象的上下文集。

所以在假设一个字符串只是基于长度或空格的空字符串之前要仔细考虑。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (BOOL)isEmpty:(NSString *)string{
    if ((NSNull *) string == [NSNull null]) {
        return YES;
    }
    if (string == nil) {
        return YES;
    }
    if ([string length] == 0) {
        return YES;
    }
    if ([[string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
        return YES;
    }
    if([[string stringByStrippingWhitespace] isEqualToString:@""]){
        return YES;
    }
    return NO;
}


最好的方法是使用类别。您可以检查以下功能。它有所有的检查条件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-(BOOL)isNullString:(NSString *)aStr{
        if([(NSNull *)aStr isKindOfClass:[NSNull class]]){
            return YES;
        }
        if ((NSNull *)aStr  == [NSNull null]) {
            return YES;
        }
        if ([aStr isKindOfClass:[NSNull class]]){
            return YES;
        }
        if(![[aStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]){
            return YES;
        }
        return NO;
    }


1
if (string.length == 0) stringIsEmpty;

您可以使用以下命令轻松检查字符串是否为空:

1
2
3
if ([yourstring isEqualToString:@""]) {
    // execute your action here if string is empty
}

在任何情况下,最好的方法是检查给定字符串的长度。为此,如果字符串是mystring,则代码为:

1
2
3
4
5
6
7
    int len = [myString length];
    if(len == 0){
       NSLog(@"String is empty");
    }
    else{
      NSLog(@"String is : %@", myString);
    }

我用以下代码检查了一个空字符串:

1
2
3
4
5
6
//Check if we have any search terms in the search dictionary.
if( (strMyString.text==(id) [NSNull null] || [strMyString.text length]==0
       || strMyString.text isEqual:@"")) {

   [AlertView showAlert:@"Please enter a valid string"];  
}

它和if([myString isEqual:@""])if([myString isEqualToString:@""])一样简单。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Different validations:
 NSString * inputStr = @"Hey";

//Check length
[inputStr length]

//Coming from server, check if its NSNull
[inputStr isEqual:[NSNull null]] ? nil : inputStr

//For validation in allowed character set
-(BOOL)validateString:(NSString*)inputStr
{
    BOOL isValid = NO;
    if(!([inputStr length]>0))
    {
        return isValid;

    }

    NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@".-"];
    [allowedSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]];
    if ([inputStr rangeOfCharacterFromSet:[allowedSet invertedSet]].location == NSNotFound)
    {
        // contains only decimal set and '-' and '.'

    }
    else
    {
        // invalid
        isValid = NO;

    }
    return isValid;
}

检查一下:

1
2
3
4
if ([yourString isEqualToString:@""])
{
    NsLog(@"Blank String");
}

1
2
3
4
if ([yourString length] == 0)
{
    NsLog(@"Blank String");
}

希望这会有所帮助。


尝试以下操作

1
2
3
4
5
6
7
8
9
10
NSString *stringToCheck = @"";

if ([stringToCheck isEqualToString:@""])
{
   NSLog(@"String Empty");
}
else
{
   NSLog(@"String Not Empty");
}

1
2
3
4
5
6
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
    NSLog(@"String is empty");
}
else{
    NSLog(@"String is not empty");
}


空字符串有两种方式:

1)@"//不包含空格

2)@""//包含空格

从技术上讲,两个字符串都是空的。我们可以只用一个条件来写这两件事

1
2
3
4
5
6
7
8
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@"" withString:@""].length==0)
{
    NSLog(@"Empty String");
}
else
{
    NSLog(@"String contains some value");
}

1
2
3
4
if( [txtMobile.text length] == 0 )
{
    [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}