Ios 如何测试Objective-C中的字符串是否为空?

Ios 如何测试Objective-C中的字符串是否为空?,ios,objective-c,nsstring,Ios,Objective C,Nsstring,如何测试Objective-C中的NSString是否为空?您可以检查[string length]==0。这将检查它是否是有效的空字符串(@“”)以及它是否为nil,因为对nil调用length也将返回0。Marc的答案是正确的。但我将借此机会包括一个指向Wil Shipley广义的isEmpty的指针,他在他的: 第一种方法是有效的,但如果字符串中有空格(@“),则不起作用。因此,在测试之前,必须清除此空白 此代码清除字符串两侧的所有空白空间: [stringObject stringByT

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

您可以检查
[string length]==0
。这将检查它是否是有效的空字符串(@“”)以及它是否为nil,因为对nil调用
length
也将返回0。

Marc的答案是正确的。但我将借此机会包括一个指向Wil Shipley广义的
isEmpty
的指针,他在他的:


第一种方法是有效的,但如果字符串中有空格(
@“
),则不起作用。因此,在测试之前,必须清除此空白

此代码清除字符串两侧的所有空白空间:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
一个好主意是创建一个宏,这样您就不必键入以下怪物行:

#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
现在您可以使用:

NSString *emptyString = @"   ";

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

您最好使用以下类别:

@implementation NSString (Empty)

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

@end

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

我这样说:

@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。

另一个选项是检查它是否等于
@“
,并带有
IsequalString:
,如下所示:

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

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

    int len = [myString length];
    if(len == 0){
       NSLog(@"String is empty");
    }
    else{
      NSLog(@"String is : %@", myString);
    }

只需使用如下所示的
if
else
条件之一:

方法1:

if ([yourString isEqualToString:@""]) {
        // yourString is empty.
    } else {
        // yourString has some text on it.
    }
if ([yourString length] == 0) {
    // Empty yourString
} else {
    // yourString is not empty
}
方法2:

if ([yourString isEqualToString:@""]) {
        // yourString is empty.
    } else {
        // yourString has some text on it.
    }
if ([yourString length] == 0) {
    // Empty yourString
} else {
    // yourString is not empty
}

非常有用的帖子,添加NSDictionary支持,还有一个小改动

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

这对我来说很有魅力

如果
NSString
s

if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {

    NSLog(@"s is empty");

} else {

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

}

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

+(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;
}
+(BOOL)isEmpty:(NSString*)str
{
if(str.length==0 | |[str iskindof class:[NSNull class]]| |[str isEqualToString:@'']|[str isEqualToString:NULL]|[str isEqualToString:@](NULL)]| | str==nil |[str isEqualToString:@''){
返回YES;
}
返回否;
}
检查以下内容:

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


<>希望这有帮助。

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

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

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

这可能意味着没有有意义的字符。所有点、虚线或下划线都可能被视为空。 此外,如果没有有意义的字符,则可能意味着该字符串没有读者理解的字符。 它们可以是对读者来说毫无意义的语言或字符集中的字符。我们可以稍微不同地定义它,说字符串在给定的语言中没有已知的单词

我们可以说空是渲染的glyph中负空间百分比的函数

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

结语。 这里,长度并不是唯一的衡量标准。 上下文集成员资格也非常重要

字符集成员是一种非常重要的常用附加度量。 有意义的序列也是相当常见的。(想想SETI、加密或CAPTCHA) 还存在其他更抽象的上下文集


因此,在根据长度或空格假设字符串为空之前,请仔细考虑

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

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

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

+(BOOL)isStringEmpty:(NSString *)str {
     if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
            return YES;
       }
      return NO;
  }

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

+(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并添加此方法,这样您就可以通过应用程序调用它来使用此方法。

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

//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"];  
}

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

假设字符串名为
NSString*strIsEmpty

方法1:

if(strIsEmpty.length==0)
{
    //String is empty
}

else
{
    //String is not empty
}
if([strIsEmpty isEqualToString:@""])
{
    //String is empty
}

else
{
    //String is not empty
}
方法2:

if(strIsEmpty.length==0)
{
    //String is empty
}

else
{
    //String is not empty
}
if([strIsEmpty isEqualToString:@""])
{
    //String is empty
}

else
{
    //String is not empty
}
选择上述任何一种方法,并了解字符串是否为空。

它就像
if([myString isEqual:@”“])
if([myString IsequalString:@”“])一样简单。
Swift版本 尽管这是一个客观的C问题,但我需要在Swift中使用
NSString
,所以我也会在这里给出答案

let myNSString: NSString = ""

if myNSString.length == 0 {
    print("String is empty.")
}
或者如果
NSString
是可选的:

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
字符串
版本为

let myString: String = ""

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

另请参见:

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

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

只需检查字符串长度

 if (!yourString.length)
 {
   //your code  
 }
发送到NIL的消息将返回NIL或0,因此无需测试NIL:)


快乐编码…

您可以通过两种方式获得空字符串:

//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) @“”//包含空格

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

if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
    NSLog(@"Empty String");
}
else
{
    NSLog(@"String contains some value");
}
试试下面的方法

NSString *stringToCheck = @"";

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

如果您希望这是非常通用的,可以将此逻辑实现为NSObject上的一个类别,而不是使用此处所示的静态方法
//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;
}
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
    NSLog(@"Empty String");
}
else
{
    NSLog(@"String contains some value");
}
NSString *stringToCheck = @"";

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