【问题标题】:NSString question - rangeOfString methodNSString 问题 - rangeOfString 方法
【发布时间】:2010-08-17 15:55:14
【问题描述】:

我遇到了一个我无法解决的问题。

我正在尝试对字符串运行 rangeOfString 方法,但我不确定如何确定是否找不到该字符串。例如:

NSRange range = [@"abc" rangeOfString:@"d" options:NSCaseInsensitiveSearch range:NSMakeRange(0,3)];

显然,字符串“abc”中不包含“d”。我希望能够做到这一点:

if(the range is empty since "d" is not in "abc")
   //do something

这个代码是什么?

谢谢!!

【问题讨论】:

    标签: iphone nsstring


    【解决方案1】:

    来自NSString的文档

    -[NSString rangeOfString]
    

    返回值

    NSRange 结构给出 在接收器中的位置和长度 aString 的第一次出现。 如果 aString 是,则返回 {NSNotFound, 0} 未找到或为空 (@"")。

    所以它看起来像:

    if ([@"abc" rangeOfString:@"d"].location == NSNotFound){
      //Do something
    

    是苹果认可的方式。

    编辑:

    我犯了一个非常糟糕的错字,已修正,谢谢 Kalle。

    【讨论】:

    • 你需要两个等号。
    • 这是否意味着检查长度不是“Apple-approved”? ;-)
    • 我不知道。无论如何,仅仅因为它没有得到 Apple 的批准并没有错(参见:App Store 拒绝)
    • 检查长度也是正确的,但肯定不太清楚
    • 此方法在字符串为空的情况下不起作用。我会检查长度。
    【解决方案2】:

    检查范围的长度。如果不为零,则已找到。

    【讨论】:

    • 来自 NSString.h 中的 cmets:“如果找不到目标字符串,这些方法返回 length==0”。我更喜欢这种方法,因为 NSNotFound 是一个 #define NSIntegerMax,它的值会根据运行时环境(即 32 与 64 位)而变化
    • 检查长度更好。如果接收者为 nil,则长度和位置都返回为 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多