我正在寻找一种在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
}