यह पता लगाना कि क्या एक NSString शामिल है ...?


124

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

@"Here is my string."

मैं जानना चाहूंगा कि क्या मैं स्ट्रिंग में किसी शब्द का पता लगा सकता हूं, जैसे कि "उदाहरण के लिए"।



26
क्या आप एक उत्तर स्वीकार कर सकते हैं?
जैकब रीलकिन

एक सस्ता और गंदा समाधान, यदि स्ट्रिंग को कोई विराम चिह्न नहीं माना जाता है, तो बीओटीएच स्ट्रिंग्स के सामने और पीछे कंबल को खाली करना है, फिर करें rangeOfString
हॉट लिप्स

जवाबों:


192

यहां बताया गया है कि मैं यह कैसे करूंगा:

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

2
वास्तव में आप केवल स्ट्रिंग की शुरुआत और अंत में स्थान जोड़ सकते हैं और "is will match string with
start

यह मुझे स्तब्ध करता है कि ये मानक वर्ग का हिस्सा नहीं हैं। धन्यवाद, @ जेकब!
big_m

1
वास्तव में, NSRange की "लंबाई" का परीक्षण किया जाना चाहिए ... "स्थान" नहीं। यह सीधे स्रोत से है: "ये विधियाँ लंबाई == 0 हैं यदि लक्ष्य स्ट्रिंग नहीं मिली है। इसलिए, रोकथाम के लिए जाँच करें: ([ str rangeOfString: @ "लक्ष्य"]। लंबाई> 0)। ध्यान दें कि इन विधियों द्वारा लौटाए गए रेंज की लंबाई लक्ष्य स्ट्रिंग की लंबाई से भिन्न हो सकती है, कारण बना वर्ण और ऐसा। "
GtotheB

IOS 8.0 से शुरू होकर containsStringNSString में एक नया तरीका सामने आया है।
tedyyu

89

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

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

जब मैं किसी सरणी पर इस विधि का उपयोग करूं, तो मुझे स्थान कैसे मिलेंगे?
न्यायाधीश

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

ps ऊपर दिए गए कोड में फ़ॉर्मेटिंग सब सही है लेकिन स्पष्ट रूप से टिप्पणी में होने से मैश हो जाता है
simon_smiley

22

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

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

यहां iOS7 में "रेट्रोफिट" करने के तरीके पर एक दिलचस्प पोस्ट है: http://petersteinberger.com/blog/2014/retrofitting-containsstring-on-ios-7/


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

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

3

मैं 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


3

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

@implementation NSString (Contains)

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

2

आईओएस 8 और स्विफ्ट के साथ, हम स्थानीयकृत कैशेइन्सेंसिव का उपयोग कर सकते हैं

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

 string.localizedCaseInsensitiveContainsString(substring) // true

0

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.