不区分大小写的字符串搜索 - iPhone

9
我正在寻找一种在Objective-C中对一个字符串执行不区分大小写的搜索方法。我可以找到搜索区分大小写字符串和比较不区分大小写的方法,但没有搜索+不区分大小写的方法。
我想执行的搜索示例:
- 在“i told JOHN to find me a good search algorithm”中搜索“john”。 - 在“I think its a really baD idea to post this question”中搜索“bad IDEA”。
我更喜欢使用NSStrings。
4个回答

31
NSRange r = [MyString rangeOfString:@"Boo" options:NSCaseInsensitiveSearch];

如果你经常这样做,可以随意将其封装到NSString的类别方法中。示例代码如下:

@interface NSString(MyExtensions)
-(NSRange)rangeOfStringNoCase:(NSString*)s;
@end

@implementation NSString(MyExtensions)
-(NSRange)rangeOfStringNoCase:(NSString*)s
{
    return  [self rangeOfString:s options:NSCaseInsensitiveSearch];
}
@end

使用这种方法可能会使您的代码更易读。但对于不熟悉该方法的人来说,它可能变得更难读。


3
在处理此类问题时,你的首要选择应该是查阅Xcode的在线帮助而不是StackOverflow。在菜单中选择“帮助/搜索NSString”,然后选择“NSString类参考”即可。请注意保持内容原意,并使其更易于理解,但不添加任何额外的解释或信息。 - Seva Alekseyev

9

被错误标记为c#?

这里有一些关于Objective-C的建议:

NSRange textRange = [[string lowercaseString] rangeOfString:[substring lowercaseString]];

if(textRange.location != NSNotFound)
{
//Does contain the substring
}

你是否需要判断一个字符串中是否包含另一个子字符串?我从谷歌的这个网页上找到了一些相关信息:http://www.developers-life.com/does-a-nsstring-contain-a-substring.html,你可以参考一下。这对你的情况有帮助吗?

1
让我检查一下,感谢您的纠正,是的,def ObjC :) 顺便问一下 - 为什么要使用“lowercaseString”进行不区分大小写?再次感谢。 - TommyG
没有特别的原因 - 我只是从网站上复制了示例,因为我现在不在我的 Xcode 机器上。 - Mark
底部的例子更简单,但无论如何都会得到我的赞同,感谢! - TommyG
那非常非常低效,而且不能保证正确工作。你的比较创建了两个自动释放的字符串,将它们都转换为小写,这非常低效。如果字符串是“以......开头的一个非常长的字符串......”,子字符串是“a”或“very”,那么这甚至更加低效,因为有数不清的字符被转换却没有必要。"不能工作"是因为Unicode中有一些有趣的字符。 - gnasher729

8
如果您正在使用iOS 8,您可以使用NSString的localizedCaseInsensitiveContainsString方法。
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)aString localizedCaseInsensitiveContainsString是一个不区分大小写的变体。请注意,它也会考虑当前的语言环境。如果要进行与语言环境无关的大小写不敏感操作和其他需求,则可以直接调用rangeOfString:options:range:locale: 方法。

0

这里有一个自包含的 Swift 解决方案:

private func containsKeyword(text: NSString, keyword: String) -> Bool
{
  return text.rangeOfString(keyword, options:NSStringCompareOptions.CaseInsensitiveSearch).location != NSNotFound
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接