2010-07-20 25 views
122

मैं कैसे पता लगा सकता हूं कि एक स्ट्रिंग में एक निश्चित शब्द है या नहीं? उदाहरण के लिए, मैं एक स्ट्रिंग जो नीचे पढ़ता है:यह पता लगाना कि क्या एनएसएसटींग में शामिल है ...?

@"Here is my string." 

मुझे पता है कि अगर मैं स्ट्रिंग में एक शब्द का पता लगा सकते हैं, जैसे कि उदाहरण के लिए "है" चाहते हैं।

+0

के संभावित डुप्लिकेट [searchi: iOS7 यहाँ करने के लिए एनजी एनएसएसटींग कोको?] (http://stackoverflow.com/questions/2609456/searching-nsstring-cocoa) – kennytm

+26

क्या आप उत्तर स्वीकार कर सकते हैं? –

+0

एक सस्ता और गंदा समाधान, स्ट्रिंग कोई विराम चिह्न शामिल करने के लिए माना जाता है, तो, आगे और दोनों तार की पीठ पर रिक्त स्थान को श्रेणीबद्ध करने के लिए, तो rangeOfString' कर 'है। –

उत्तर

190

यहाँ कैसे मैं यह कर देगा:

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 
+0

यहाँ NSString http://goo.gl/SNkk0 के लिए एक उपयोगी श्रेणी है –

+2

वास्तव में आप केवल शुरुआत और स्ट्रिंग के अंत पर अंतरिक्ष में जोड़ सकते हैं और "है" से मेल खाएगी तार के साथ –

+0

यह मुझे stuns इन कि "है" शुरू होता है मानक वर्ग का हिस्सा नहीं हैं। धन्यवाद, @ जैकोब! –

0

एक पूर्ण समाधान पहले (जोड़ा कारतूस के बिना) स्ट्रिंग के लिए स्कैन होगा , फिर जांचें कि तत्काल पूर्व वर्ण या तो रिक्त या रेखा की शुरुआत है या नहीं। इसी प्रकार जांच करें कि तत्काल निम्नलिखित वर्ण या तो खाली या रेखा का अंत है या नहीं। यदि दोनों परीक्षण पास होते हैं तो आपके पास एक मैच होता है। अपनी आवश्यकताओं के आधार पर आप भी जाँच कर सकते हैं ,, ., (), आदि

एक वैकल्पिक दृष्टिकोण के लिए, ज़ाहिर है, शब्दों में स्ट्रिंग पार्स और व्यक्तिगत रूप से प्रत्येक शब्द की जाँच करने के लिए है।

2

मैं 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]); 
          }]; 

यह outputs खोज करने के लिए उपयोग कर सकते हैं:

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 

यह Hismississippi और isthmus पर ध्यान नहीं देता और यहां तक ​​कि isisn't के अंदर पहचान करता है।

88

वाक्य में शब्द को स्कैन करने के लिए निम्न कोड का प्रयोग करें।

NSString *sentence = @"The quick brown fox"; 
NSString *word = @"quack"; 
if ([sentence rangeOfString:word].location != NSNotFound) { 
    NSLog(@"Yes it does contain that word"); 
} 
+0

जब मैं इस विधि का उपयोग सरणी पर करता हूं तो मैं स्थानों को कैसे प्राप्त कर सकता हूं? – judge

+0

निर्भर करता है कि आप सरणी में खोज का उपयोग कर रहे हैं। तुलनित्रों का उपयोग किए बिना मुझे लगता है कि सरणी के माध्यम से लूप करना सबसे अच्छा तरीका है और खोज स्ट्रिंग के लिए प्रत्येक स्ट्रिंग को जांचना है। एनएसएसटींग * सर्चस्ट्रिंग; के लिए (सरणी में NSString * स्ट्रिंग) { अगर ([स्ट्रिंग rangeOfString: searchString विकल्प: NSCaseInsensitiveSearch]! .location = NSNotFound) { // नहीं स्ट्रिंग } किसी और में { // इस स्ट्रिंग में } } फिर आप स्ट्रिंग्स को जोड़ सकते हैं जिसमें इसे एक नए म्यूटेबल सरणी में शामिल किया गया है जो आपको उन्हें दिखाने में सक्षम बनाता है यदि आप –

+0

ps खोज रहे हैं तो फ़ॉर्मेटिंग उपरोक्त कोड में सही है लेकिन स्पष्ट रूप से टिप्पणी में –

3

मुझे आशा है कि यह आपकी मदद करेगा .. .. इस लाइन को .m फ़ाइल में जोड़ें या एक अलग वर्ग बनाएं और इस कोड को एकीकृत करें।

@implementation NSString (Contains) 

- (BOOL) containsString: (NSString*) substring 
{ 
NSRange range = [self rangeOfString : substring]; 
BOOL found = (range.location != NSNotFound); 
return found; 
}  
@end 
2

iOS 8 और स्विफ्ट के साथ, हम localizedCaseInsensitiveContainsString विधि

let string: NSString = "Café" 
let substring: NSString = "É" 

string.localizedCaseInsensitiveContainsString(substring) // true 
+0

, लेकिन भविष्य के लिए अच्छा है। –

19

उपयोग कर सकते हैं iOS8 में अब आप उपयोग कर सकते हैं:

BOOL containsString = [@"Here is my string." containsString:@"is"]; 

वहाँ कैसे "पुनः स्थापित" के लिए उस पर कोई रोचक पोस्ट है http://petersteinberger.com/blog/2014/retrofitting-containsstring-on-ios-7/

+0

यह बहुत अच्छा आसान तरीका होगा। दुर्भाग्य से यह दस्तावेज नहीं है और इसलिए निजी एपीआई – Centurion

+2

यह निश्चित रूप से निजी एपीआई नहीं है। NSString.h फ़ाइल देखें और आप इसे देखेंगे। –

संबंधित मुद्दे