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

时间:2009-05-22 18:12:49

标签: ios objective-c nsstring

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

30 个答案:

答案 0 :(得分:1123)

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

答案 1 :(得分:126)

马克的回答是正确的。但是我会借此机会包括一个指向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);
}

答案 2 :(得分:93)

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

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

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

一个好主意是创建一个宏,所以你不必输入这个怪物行:

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

现在你可以使用:

NSString *emptyString = @"   ";

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

答案 3 :(得分:30)

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

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

答案 4 :(得分:16)

您最好使用此类别:

@implementation NSString (Empty)

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

@end

答案 5 :(得分:12)

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

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

答案 6 :(得分:11)

我说这个:

@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,这是期望的。

答案 7 :(得分:11)

另一种选择是检查它是否等于@"" isEqualToString:,如下所示:

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

答案 8 :(得分:6)

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

方法1:

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

方法2:

if ([yourString length] == 0) {
    // Empty yourString
} else {
    // yourString is not empty
}

答案 9 :(得分:6)

Swift版本

即使这是一个Objective 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 String版本是

let myString: String = ""

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

另请参阅:Check empty string in Swift?

答案 10 :(得分:5)

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

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

答案 11 :(得分:4)

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

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

方法1:

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

else
{
    //String is not empty
}

方法2:

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

else
{
    //String is not empty
}

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

答案 12 :(得分:4)

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

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

答案 13 :(得分:3)

非常有用的帖子,添加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);
}

答案 14 :(得分:3)

只需检查字符串长度

 if (!yourString.length)
 {
   //your code  
 }

到NIL的消息将返回nil或0,因此无需测试nil:)。

快乐的编码......

答案 15 :(得分:2)

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

答案 16 :(得分:2)

最好的方法是使用该类别 您可以检查以下功能。哪个条件有待检查。

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

答案 17 :(得分:2)

除了检查字符串长度小于1的基本概念之外,深入考虑上下文非常重要。  人类或计算机或其他语言可能具有不同的空字符串定义,并且在这些语言中,附加上下文可能进一步改变含义。

让我们说空字符串表示&#34;一个不包含当前上下文中重要字符的字符串&#34;。

这可能是视觉上的,因为颜色和背景颜色在属性字符串中是相同的。有效地空着。

这可能意味着没有意义的字符。所有点或所有破折号或所有下划线都可能被视为空。 此外,空的有意义的重要字符可能意味着一个字符串没有读者理解的字符。 它们可能是语言或字符集中的字符,被定义为对读者毫无意义。我们可以稍微区别一点来说明字符串在给定语言中不会形成已知单词。

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

即使是一系列没有一般视觉表现的不可打印字符也不是真正的空白。想到控制角色。特别是低ASCII范围(我很惊讶没有人提到那些因为它们管道很多系统并且不是空格,因为它们通常没有字形且没有可视指标)。但字符串长度不为零。

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

字符集成员资格是一项非常重要的常用附加措施。 有意义的序列也是一个相当普遍的序列。 (想想SETI或加密或验证码) 还存在其他更抽象的上下文集。

因此在假设字符串仅基于长度或空格的空白之前要仔细考虑。

答案 18 :(得分:2)

它对我有魅力

如果NSStrings

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

    NSLog(@"s is empty");

} else {

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

}

答案 19 :(得分:1)

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

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

答案 20 :(得分:1)

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

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

答案 21 :(得分:1)

检查一下:

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

或者

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

希望这会有所帮助。

答案 22 :(得分:1)

简单到if([myString isEqual:@""])if([myString isEqualToString:@""])

答案 23 :(得分:1)

if (string.length == 0) stringIsEmpty;

答案 24 :(得分:1)

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

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

答案 25 :(得分:1)

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

答案 26 :(得分:0)

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

答案 27 :(得分:0)

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

1)@&#34;&#34; //不包含空格

2)@&#34; &#34; //包含空格

从技术上讲,两个字符串都是空的。我们可以使用 ONE 条件

来编写这两个内容
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
    NSLog(@"Empty String");
}
else
{
    NSLog(@"String contains some value");
}

答案 28 :(得分:0)

尝试以下

NSString *stringToCheck = @"";

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

答案 29 :(得分:-1)

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