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


当前回答

if (string.length == 0) stringIsEmpty;

其他回答

第一种方法是有效的,但如果字符串中有空格(@" ")则无效。所以在测试之前必须清除这些空白。

这段代码清除了字符串两边的所有空格:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

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

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

现在你可以使用:

NSString *emptyString = @"   ";

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

看看这个:

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

Or

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

希望这能有所帮助。

这对我来说是一种魅力

如果NSString是s

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

    NSLog(@"s is empty");

} else {

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

}

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

假设空字符串意味着“在当前上下文中不包含任何重要字符的字符串”。

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

这可能意味着没有有意义的字符。所有的点、破折号或下划线都可能被认为是空的。 此外,空有意义的有效字符可能意味着一个字符串没有读者能理解的字符。 它们可以是定义为对读者毫无意义的语言或字符集中的字符。我们可以稍微不同地定义它,即字符串在给定语言中不构成已知单词。

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

即使是没有一般视觉表示的不可打印字符序列也不是真正的空字符。我想到了控制字符。特别是低ASCII范围(我很惊讶没有人提到这些,因为它们包含许多系统,而不是空白,因为它们通常没有字形和可视指标)。然而,字符串长度不是零。

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

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

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

我这样写:

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