回答
這是我會怎麼做:
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. 如何檢查NSString是否包含'%'?
- 2. 可以檢查NSData是否包含NSString
- 3. 檢測NSString是否包含中文字符
- 4. 如何檢測NSString是否包含NSTextAttachment圖像?
- 5. NSPredicate測試NSString是否包含另一個NSString中的字符
- 6. 如何檢測表是否包含表?
- 7. 檢測收集是否包含數據
- 8. 檢測是否NSString的是浮點數
- 9. 如何檢查NSString是否包含URL或字符串數據?
- 10. 如何檢查NSURL是否包含NSString null?
- 11. NSString - 如何檢查它是否包含引號<">
- 12. 檢查NSString實例是否包含在一個NSArray中
- 13. 如何檢測NSString是否爲空?
- 14. 是否可以檢測頁面是否包含PHP?
- 15. 檢查是否包含jQuery
- 16. 檢查是否行包含/ *
- 17. 檢查NSString包含字母和數字
- 18. 檢查NSString是否爲空或僅包含空格或製表符?
- 19. 如何檢查NSString是否包含特定格式的字符串?
- 20. Nodejs如何檢測是否包含模塊
- 21. 檢測一個字文件是否包含重複
- 22. Playstore如何檢測我們的應用是否包含廣告?
- 23. 是否有可能檢測何時包含php文件?
- 24. 在迭代之前檢測IDataReader是否包含某個字段
- 25. php - 檢測變量是否只包含空格
- 26. 檢測是否提供了可選參數(可能包含無)
- 27. 如何檢測HTML頁面是否包含視頻?
- 28. 在JavaScript中,如何檢測輸入是否包含字母?
- 29. 如何檢測網址是否包含飼料?
- 30. 檢測一個字符串是否包含「真正的句子」?
[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