नियमित अभिव्यक्ति समाधान है कि जाक काम करता है देता है, और चेतावनी आईओएस 4.0 की आवश्यकता है और बाद में सच है। नियमित अभिव्यक्तियों का उपयोग करना भी काफी धीमा है, और यदि खोज अभिव्यक्ति स्ट्रिंग स्थिरांक ज्ञात हैं तो एक ओवरकिल।
आप NSString
पर विधियों का उपयोग करके समस्या का समाधान कर सकते हैं, या NSScanner
नाम की कक्षा, दोनों आईफोन ओएस 2.0 के बाद से उपलब्ध हैं और इससे पहले कि मैक ओएस एक्स 10.0 वास्तव में पहले से ही :)।
तो आप क्या चाहते हैं NSString
पर यह एक नई विधि है?
@interface NSString (CWAddition)
- (NSString*) stringBetweenString:(NSString*)start andString:(NSString*)end;
@end
कोई बात नहीं, और हम यह मान हम लौट जाना nil
ऐसी कोई तार पाया जा सकता है है।
NSString
का उपयोग कर कार्यान्वयन केवल काफी सीधे आगे है:
@implementation NSString (NSAddition)
- (NSString*) stringBetweenString:(NSString*)start andString:(NSString*)end {
NSRange startRange = [self rangeOfString:start];
if (startRange.location != NSNotFound) {
NSRange targetRange;
targetRange.location = startRange.location + startRange.length;
targetRange.length = [self length] - targetRange.location;
NSRange endRange = [self rangeOfString:end options:0 range:targetRange];
if (endRange.location != NSNotFound) {
targetRange.length = endRange.location - targetRange.location;
return [self substringWithRange:targetRange];
}
}
return nil;
}
@end
या आप NSScanner
वर्ग का उपयोग कर कार्यान्वयन कर सकता है:
@implementation NSString (NSAddition)
- (NSString*) stringBetweenString:(NSString*)start andString:(NSString*)end {
NSScanner* scanner = [NSScanner scannerWithString:self];
[scanner setCharactersToBeSkipped:nil];
[scanner scanUpToString:start intoString:NULL];
if ([scanner scanString:start intoString:NULL]) {
NSString* result = nil;
if ([scanner scanUpToString:end intoString:&result]) {
return result;
}
}
return nil;
}
@end
ध्यान दें कि यह समाधान यह सुनिश्चित नहीं करता है कि दुनिया और शब्द सीमाओं पर है। आप इससे निपटने के लिए और कोड जोड़ सकते हैं, लेकिन यह मुश्किल हो सकता है, इसलिए मैं सभी कोने के मामलों से निपटने में आसान बनाने के लिए नियमित अभिव्यक्तियों (या तो एनएसआरग्यूलर एक्स्प्रेशन या आईओएस 3 के लिए रेगेक्सकिटलाइट) का उपयोग करने का सुझाव दूंगा। यह देखने के लिए कुछ प्रोफाइलिंग करें कि आपको समाधान को कोड-कोड करने की आवश्यकता है या नहीं। – Jacques
धन्यवाद! मुझे स्ट्रिंग्स को भी कई बार मिलना होगा ... यानी। हैलो अलविदा मुझे लगता है कि मैं केवल एक और पैरामीटर (घटना) में जोड़ सकता हूं और फिर शुरुआती स्ट्रिंग एक्स बार के माध्यम से लूप कर सकता हूं, है ना? मुझे इसे समझने में सक्षम होना चाहिए, खासकर जब से आपने मुझे एनएसआरेंज का प्रारंभिक बिंदु दिया, आदि। धन्यवाद फिर से! –
हां, कोई समस्या नहीं होनी चाहिए। अगली खोज की खोज सीमा को सीमित करने के लिए बस पिछली खोज से श्रेणियों का उपयोग करें। – PeyloW