अगर मैं एनएसएसट्रिंग से एक मूल्य प्राप्त करना चाहता हूं, तो मुझे @"value:hello World:value"
क्या उपयोग करना चाहिए?
मुझे जो रिटर्न वैल्यू चाहिए वह है @"hello World"
।
अगर मैं एनएसएसट्रिंग से एक मूल्य प्राप्त करना चाहता हूं, तो मुझे @"value:hello World:value"
क्या उपयोग करना चाहिए?
मुझे जो रिटर्न वैल्यू चाहिए वह है @"hello World"
।
"hello World"
चाहते हैं ? return @"hello World"
। क्या आप कॉलोन के बीच बस वापस जाना चाहते हैं? क्या आप बाईं-सबसे बृहदान्त्र के बायीं ओर और दाएं-सबसे अधिक बृहदान्त्र के सब कुछ पट्टी करना चाहते हैं? इस प्रश्न के लिए कोई स्पष्ट रूप से परिभाषित इनपुट-आउटपुट मानदंड नहीं है (जैसा कि हम उन प्रश्नों की परिणामी सूची के साथ देखते हैं जो सभी दृष्टिकोण के एक जंगली सरणी के साथ समस्या को हल करते हैं)।
जवाबों:
विकल्प 1:
NSString *haystack = @"value:hello World:value";
NSString *haystackPrefix = @"value:";
NSString *haystackSuffix = @":value";
NSRange needleRange = NSMakeRange(haystackPrefix.length,
haystack.length - haystackPrefix.length - haystackSuffix.length);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle); // -> "hello World"
विकल्प 2:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^value:(.+?):value$" options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:haystack options:NSAnchoredSearch range:NSMakeRange(0, haystack.length)];
NSRange needleRange = [match rangeAtIndex: 1];
NSString *needle = [haystack substringWithRange:needleRange];
हालांकि यह आपके बल्कि तुच्छ मामले के लिए थोड़ा ऊपर हो सकता है।
विकल्प 3:
NSString *needle = [haystack componentsSeparatedByString:@":"][1];
यह विभाजन करते समय तीन अस्थायी तार और एक सरणी बनाता है।
सभी स्निपेट्स मानते हैं कि जो खोजा गया है वह वास्तव में स्ट्रिंग में निहित है।
यहाँ एक सरल कार्य है जो आपको वह काम करने देता है जो आप खोज रहे हैं:
- (NSString *)getSubstring:(NSString *)value betweenString:(NSString *)separator
{
NSRange firstInstance = [value rangeOfString:separator];
NSRange secondInstance = [[value substringFromIndex:firstInstance.location + firstInstance.length] rangeOfString:separator];
NSRange finalRange = NSMakeRange(firstInstance.location + separator.length, secondInstance.location);
return [value substringWithRange:finalRange];
}
उपयोग:
NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
getSubstring:…
इसे कहा जाना चाहिए substringInString:…
क्योंकि आप इसे एक विकल्प नहीं दे रहे हैं और इसके साथ शुरू होने वाले तरीकों get…
को आमतौर पर लिखने के लिए एक बफर पॉइंटर को पारित करने की उम्मीद की जाती है। substringFromIndex:
एक मध्यवर्ती विकल्प बनाता है, जो कि अनावश्यक है, वही rangeOfString:options:range:
है। माना जाता है कि सामान्य बग विधि में असुरक्षित स्निपेट को लपेटकर आप बग का सामना कर रहे हैं: यदि विभाजक स्ट्रिंग में एक या कम बार मौजूद है तो आपको रेंज अपवाद से बाहर निकल जाएगा।
इसका भी उपयोग करें
NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)];
नोट - आपका NSMakeRange(start, end)
होना चाहिए NSMakeRange(start, end- start)
;
यहाँ उपसर्ग और प्रत्यय के बीच @Regexident विकल्प 1 और @Garett के उत्तर का एक छोटा संयोजन है, और अधिक और इसके साथ प्रत्यय के बीच एक शक्तिशाली स्ट्रिंग कटर पाने के लिए ... उस पर ANDMORE शब्द।
NSString *haystack = @"MOREvalue:hello World:valueANDMORE";
NSString *prefix = @"value:";
NSString *suffix = @":value";
NSRange prefixRange = [haystack rangeOfString:prefix];
NSRange suffixRange = [[haystack substringFromIndex:prefixRange.location+prefixRange.length] rangeOfString:suffix];
NSRange needleRange = NSMakeRange(prefixRange.location+prefix.length, suffixRange.location);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle);
<i></i>
उन तार को इटैलिक बनाने के लिए अपनी परियोजना में टैग के अंदर एक स्ट्रिंग प्राप्त करने के लिए एक समाधान की तलाश कर रहा हूं । :)