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



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

我想执行的搜索示例:

"john"我告诉JOHN给我找一个好的搜索算法

"坏IDEA"我觉得把这个问题贴出来实在是个坏主意

我更喜欢只使用nsstring

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

如果你经常这样做,可以自由地将它封装到NSString上category中的一个功能中。这样的:

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

这样你的代码可能会变得更可读。但是,对于不熟悉的人来说,它的可读性较差。

错配为c#?

这里有一些关于objc

的建议
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

这对你的场景有帮助吗?

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

- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)aString

localizedCaseInsensitiveContainsString:是大小写不敏感的变体。注意,它也会使当前区域设置生效。通过直接调用rangeOfString:options:range:locale:

,可以实现与地区无关的不区分大小写的操作,以及其他需求。

Swift的自容器解决方案:

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

最新更新