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

Ios 不区分大小写的字符串搜索-iphone,ios,iphone,objective-c,string,search,Ios,Iphone,Objective C,String,Search,我正在寻找在Objective-C中的另一个字符串中执行不区分大小写的字符串搜索的方法。我可以找到搜索区分大小写的字符串的方法,并比较不区分大小写的字符串,但不搜索+不区分大小写的字符串 我希望执行的搜索示例: “john”在“我告诉john给我找一个好的搜索算法” “坏主意”在“我认为发布这个问题真的是个坏主意” 我更喜欢只使用nsstring。错误地标记为c# 以下是对objc的一些建议 NSRange textRange = [[string lowercaseString] rangeO

我正在寻找在Objective-C中的另一个字符串中执行不区分大小写的字符串搜索的方法。我可以找到搜索区分大小写的字符串的方法,并比较不区分大小写的字符串,但不搜索+不区分大小写的字符串

我希望执行的搜索示例:

“john”在“我告诉john给我找一个好的搜索算法”

“坏主意”在“我认为发布这个问题真的是个坏主意”

我更喜欢只使用nsstring。

错误地标记为c#

以下是对objc的一些建议

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

if(textRange.location != NSNotFound)
{
//Does contain the substring
}
我在这个网页上从谷歌那里得到:

这有助于您的场景吗

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

这样,代码的可读性可能会更高。同样,对于那些不熟悉的人来说,可读性较低。

这里是一个针对Swift的自容器解决方案:

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

如果您使用的是ios 8,则可以使用NSString的localizedCaseInsensitiveContainsString

-(BOOL)本地化CaseInsensitiveContainsString:(NSString*)aString


localizedCaseInsensitiveContainsString:是不区分大小写的变体。请注意,它也会使当前区域设置生效。与区域设置无关的不区分大小写操作,以及其他需要可以通过调用RangeOfsString:options:range:Locale:directly来实现。

让我检查一下,感谢您的更正,yes def ObjC:)顺便问一下-您为什么要使用“小写字符串”来区分大小写?再次感谢。没有特别的原因-我只是从网站上复制了样本,因为我现在不在我的xcode ing机器上。下面的例子更简单,但我还是要为伟大的解决方案投票。谢谢这是非常非常低效的,而且不能保证正常工作。您的比较会创建两个自动释放的字符串,将它们转换为小写,这是非常低效的。如果字符串是“一个非常长的字符串,以…开头,以此类推”。而子字符串是“a”或“very”,则效率更低,因为无需转换大量字符。“不起作用”是因为Unicode中有一些有趣的字符。也就是说,像这样的问题的第一站应该仍然是Xcode的在线帮助,而不是StackOverflow。菜单,帮助/搜索NSString,选择“NSString类参考”。