回答
这是我会怎么做:
NSString *someString = @"Here is my string";
NSRange isRange = [someString rangeOfString:@"is " options:NSCaseInsensitiveSearch];
if(isRange.location == 0) {
//found it...
} else {
NSRange isSpacedRange = [someString rangeOfString:@" is " options:NSCaseInsensitiveSearch];
if(isSpacedRange.location != NSNotFound) {
//found it...
}
}
您可以轻松地为一类添加此到NSString
:
@interface NSString (JRStringAdditions)
- (BOOL)containsString:(NSString *)string;
- (BOOL)containsString:(NSString *)string
options:(NSStringCompareOptions)options;
@end
@implementation NSString (JRStringAdditions)
- (BOOL)containsString:(NSString *)string
options:(NSStringCompareOptions)options {
NSRange rng = [self rangeOfString:string options:options];
return rng.location != NSNotFound;
}
- (BOOL)containsString:(NSString *)string {
return [self containsString:string options:0];
}
@end
这里是一个方便的类别NSString http://goo.gl/SNkk0 – 2012-11-10 19:04:37
其实你可以只在字符串的开始和结尾添加空格,“is”将匹配字符串以“is”开头 – 2012-11-12 07:41:51
它让我感到惊讶这些不属于标准类。谢谢,@Jacob! – 2013-07-19 19:40:59
一个完整的解决方案将首先扫描字符串(不加空格) ,然后检查前面的字符是空白还是行尾。同样检查紧接着的字符是空白还是行尾。如果两项测试都通过,那么你有一场比赛。根据您的需要,您可能还会检查,
,.
,()
等。
另一种方法当然是将字符串解析为单词并单独检查每个单词。
我推荐使用NSLinguisticTagger。我们可以用它来搜索Here is my string. His isn't a mississippi isthmus. It is?
NSLinguisticTagger *linguisticTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[
NSLinguisticTagSchemeTokenType,
]
options:
NSLinguisticTaggerOmitPunctuation |
NSLinguisticTaggerOmitWhitespace |
NSLinguisticTaggerOmitOther ];
[linguisticTagger setString:@"Here is my string. His isn't a mississippi isthmus. It is?"];
[linguisticTagger enumerateTagsInRange:NSMakeRange(0,
[[linguisticTagger string] length])
scheme:NSLinguisticTagSchemeTokenType
options:
NSLinguisticTaggerOmitPunctuation |
NSLinguisticTaggerOmitWhitespace |
NSLinguisticTaggerOmitOther |
NSLinguisticTaggerJoinNames
usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
NSLog(@"tag: %@, tokenRange: %@, sentenceRange: %@, token: %@",
tag,
NSStringFromRange(tokenRange),
NSStringFromRange(sentenceRange),
[[linguisticTagger string] substringWithRange:tokenRange]);
}];
此输出:
tag: Word, tokenRange: {0, 4}, sentenceRange: {0, 19}, token: Here
tag: Word, tokenRange: {5, 2}, sentenceRange: {0, 19}, token: is
tag: Word, tokenRange: {8, 2}, sentenceRange: {0, 19}, token: my
tag: Word, tokenRange: {11, 6}, sentenceRange: {0, 19}, token: string
tag: Word, tokenRange: {19, 3}, sentenceRange: {19, 33}, token: His
tag: Word, tokenRange: {23, 2}, sentenceRange: {19, 33}, token: is
tag: Word, tokenRange: {25, 3}, sentenceRange: {19, 33}, token: n't
tag: Word, tokenRange: {29, 1}, sentenceRange: {19, 33}, token: a
tag: Word, tokenRange: {31, 11}, sentenceRange: {19, 33}, token: mississippi
tag: Word, tokenRange: {43, 7}, sentenceRange: {19, 33}, token: isthmus
tag: Word, tokenRange: {52, 2}, sentenceRange: {52, 6}, token: It
tag: Word, tokenRange: {55, 2}, sentenceRange: {52, 6}, token: is
它忽略His
mississippi
和isthmus
,甚至识别is
的isn't
内。
使用以下代码扫描句子中的单词。
NSString *sentence = @"The quick brown fox";
NSString *word = @"quack";
if ([sentence rangeOfString:word].location != NSNotFound) {
NSLog(@"Yes it does contain that word");
}
如何在数组上使用此方法时获取位置? – judge 2014-03-09 22:25:59
取决于您在数组中使用搜索的内容。如果不使用比较器,我认为最好的方法是遍历数组并检查每个字符串的搜索字符串。 NSString * searchString; 为(在阵列的NSString *串){ 如果([字符串rangeOfString:searchString的选项:NSCaseInsensitiveSearch]!= .location NSNotFound){ //不在串 } 其他{ //在该串 } } 然后,您可以将包含它的字符串添加到新的可变数组中,以便在搜索时显示它们 – 2014-11-03 23:58:20
ps上述代码中的格式都是正确的,但显然通过在评论 – 2014-11-03 23:58:49
我希望这可以帮助你,..在.m文件中添加此行或创建一个单独的类并集成此代码。
@implementation NSString (Contains)
- (BOOL) containsString: (NSString*) substring
{
NSRange range = [self rangeOfString : substring];
BOOL found = (range.location != NSNotFound);
return found;
}
@end
与iOS 8和斯威夫特,我们可以使用localizedCaseInsensitiveContainsString方法
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
中得到捣碎,但对未来而言是好的。 – 2014-09-04 18:32:59
在iOS8上,你现在可以使用:
BOOL containsString = [@"Here is my string." containsString:@"is"];
有一个关于如何 “改造” 成为一个有趣的帖子到iOS7: http://petersteinberger.com/blog/2014/retrofitting-containsstring-on-ios-7/
这将是非常好用的方法。不幸的是,它没有记录,因此是私人API – Centurion 2015-02-12 16:38:37
它绝对不是私人API。看看NSString.h文件,你会看到它。 – 2015-03-31 03:00:40
- 1. 可以检查NSData是否包含NSString
- 2. 如何检查NSString是否包含'%'?
- 3. 检测NSString是否包含中文字符
- 4. 检测收集是否包含数据
- 5. 检测是否NSString的是浮点数
- 6. 检查NSString实例是否包含在一个NSArray中
- 7. NSString - 如何检查它是否包含引号<">
- 8. 如何检测NSString是否为空?
- 9. 是否可以检测页面是否包含PHP?
- 10. 检查是否包含jQuery
- 11. 检查NSString包含字母和数字
- 12. 如何检查NSString是否包含特定格式的字符串?
- 13. 在迭代之前检测IDataReader是否包含某个字段
- 14. 如何检测字符串是否包含java中的URL?
- 15. 检测是否字符串包含模式
- 16. IOS/Objective-C:检测jsonResults是否包含键值对
- 17. 检测字符串中是否包含非字母
- 18. 如何检测句子是否包含在页面中(模糊)?
- 19. 如何检测HTML页面是否包含视频?
- 20. Playstore如何检测我们的应用是否包含广告?
- 21. 检测数组是否包含整数或双精度值
- 22. 检测XML文件是否包含特定命名空间
- 23. PHP如何检测图像是否包含颜色?
- 24. 检测一个字符串是否包含“真正的句子”?
- 25. 如何检测节点是否包含重要信息?
- 26. Nodejs如何检测是否包含模块
- 27. 如何检测PDF是否包含pantone颜色?
- 28. 如何检测列表是否包含重复项?
- 29. 如何检查Java类是否包含JUnit4测试?
- 30. 如何检测SimpleDB域是否包含请求的项目?
[Searchi ng NSString Cocoa?](http://stackoverflow.com/questions/2609456/searching-nsstring-cocoa) – kennytm 2010-07-20 19:24:40
你能接受答案吗? – 2010-07-21 11:18:25
如果字符串被假定为不包含标点符号,便宜又脏的解决方案是连接BOTH字符串正面和背面上的空白,然后执行'rangeOfString'。 – 2012-09-13 19:13:21