原创

iOS判断字符串为空的方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuweibo_csdn/article/details/73824395

在程序中使用一个字符串之前, 判断它是否为空是很有必要的, 否则程序就可能会出现bug或者崩溃.

一个NSString字符串为空, 通常意味着四种情况:

1.NSString对象没有初始值

NSString *aStr; // 声明了一个字符串变量, 未设置初始值

此时, 要判断它是否为空, 只需这样:

if (aStr == nil) {
    // 字符串为空
}

我曾经查阅过很多文章, 发现几乎所有人都是这样写的:

if (aStr == nil || aStr == NULL) {
    // 字符串为空
}

多了一个判断条件, aStr == NULL, 个人认为这虽然显得更谨慎一些, 但却是不必要的. 因为NULL是表示C语言中的空指针, 而NSString字符串是Objective-C中的对象, 它的空值就用nil来表示. 虽然nil和NULL在数值上都等于0, 但是它们的应用场景还是有些区别的. 既然如此, 就很容易想到一种更为简洁通用的写法:

if (!aStr) {
    // 字符串为空
}

只要aStr的指针值为0, 就可断定它为空, 干净利落而又考虑全面.

2.期望得到一个NSString字符串, 但却不幸遇到了NSNull

这种情形多见于从后台请求回来数据进行JSON解析的时候, 如果解析出的NSDictionary中某个key对应的value为空, 则系统会把它处理为NSNull类的单例对象(因为NSArray和NSDictionary中都不能存储nil). 此时, 如果不加判断就贸然使用这个”字符串”, 那么APP就很有可能会崩溃. So, 怎么判断呢? 也很简单:

if ([aStr isKindOfClass:[NSNull class]]) {
    // 字符串为空
}

3.字符串中没有任何字符, 也就是长度为0

判断这种情况就比较简单了:

if (!aStr.length) {
    // 字符串为空
}

4.字符串中除了空格和换行以外没有任何字符

对于这种情况, 可以借助字符集类NSCharacterSet和NSString类的一个方法来做判断, 具体代码如下:

// 创建一个字符集对象, 包含所有的空格和换行字符
NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
// 从字符串中过滤掉首尾的空格和换行, 得到一个新的字符串
NSString *trimmedStr = [aStr stringByTrimmingCharactersInSet:set];
// 判断新字符串的长度是否为0
if (!trimmedStr.length) {
    // 字符串为空
}

实际上, 第三种情况和第四种情况在本质上是一样的, 都表示字符串中没有任何有效的字符. 我们可以省去第三步判断, 直接进行第四步判断, 也能得到正确的结果, 之所以加上第三步的判断, 是为了提高性能, 避免第四步不必要的字符串处理过程, 节省时间和空间开销.

好了, 至此就得到全面判断字符串为空的方法了:

- (BOOL)isBlankString:(NSString *)aStr {
    if (!aStr) {
        return YES;
    }
    if ([aStr isKindOfClass:[NSNull class]]) {
        return YES;
    }
    if (!aStr.length) {
        return YES;
    }
    NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
    NSString *trimmedStr = [aStr stringByTrimmingCharactersInSet:set];
    if (!trimmedStr.length) {
        return YES;
    }
    return NO;
}

学无止境, 水平有限. 文中若有错误和不当, 欢迎大家拍砖指正~

展开阅读全文

没有更多推荐了,返回首页

博客模板©2019 由CSDN提供 模版主题为:skin3-template by CSDN官方博客 设计