zoukankan      html  css  js  c++  java
  • 如何检测字符串在Obj-C里是否为空?

    本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术。本文将为读者讲解如何检测字符串在Objective-C里是否为空。

    问题:

    Jamey McElveen

    如何检测NSString在Objective-C里是否为空?

    答案:

    Marc Charbonneau

    可以检查是否[string length] == 0。这将检查它是否是一个有效但是为空的字符串(@"")以及其是否为无值。因为调用无值的length也将返回0。

    Matt G

    楼上的回答是正确的。但是我想借此机会介绍一下Wil Shipley总结的isEmpty,他分享在blog上的:

    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
    NSString *emptyString = @"   ";
    if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
    Rob

    我见过的最好的解决方法之一(比Matt G的更好)这种改进的内联函数,我在Git Hub报告里找到的:

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

    user238824

    你最好使用这个函数:

    1
    2
    3
    4
    5
    6
    7
    @implementation NSString (Empty)
     
        - (BOOL) empty{
            return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
        }
     
    @end

    chown 

    另一个选择是使用isEqualToString检查是否等于@"",就像这样:

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

    我用的这个:

    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无值, 这个功能就永远不会被调用。它将返回false,这是所需的。

    Samir Jwarchan

    使用下面的if else条件之一就可以:

    方法1:

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

    方法 2:

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

    原文链接:stackoverflow

    文章选自StackOverFlow社区,鉴于其内容对于开发者有所帮助,现将文章翻译于此,供大家参考及学习。9Tech将每日持续更新,读者可点击StackOverflow(简称:SOF)精选问答汇总,查看全部译文内容。同时,我们也招募志同道合的技术朋友共同翻译,造福大家!报名请发邮件至zhangqi_wj#cyou-inc.com。(#换成@)

     
  • 相关阅读:
    Android SwitchButton(滑动开关)
    创建您自己的Maven模板
    Bag标签成一条线的代码来实现中国字
    rabbitmq的java简单的实现
    【七】注入框架RoboGuice使用:(Your First Custom Binding)
    Sqlmap渗透测试是常用语句
    Android NOtification 使用(震动 闪屏 铃声)
    Android loader 详解
    Android实现获取本机中所有图片
    Android保存图片到系统图库
  • 原文地址:https://www.cnblogs.com/xyzaijing/p/4043703.html
Copyright © 2011-2022 走看看