एनएसएसट्रिंग एक निश्चित चरित्र के साथ शुरू होता है, तो कैसे जांचें


210

यदि आप एक निश्चित चरित्र (चरित्र *) के साथ एनएसएसट्रिंग शुरू करते हैं तो आप कैसे जांचते हैं।

* सेल के प्रकार के लिए एक संकेतक है, इसलिए मुझे * के बिना इस NSString की सामग्री की आवश्यकता है, लेकिन यह जानने की आवश्यकता है कि क्या * मौजूद है।

जवाबों:


453

आप की -hasPrefix:विधि का उपयोग कर सकते हैं NSString:

उद्देश्य सी:

NSString* output = nil;
if([string hasPrefix:@"*"]) {
    output = [string substringFromIndex:1];
}

स्विफ्ट:

var output:String?
if string.hasPrefix("*") {
    output = string.substringFromIndex(string.startIndex.advancedBy(1))
}

क्या इस पद्धति का उपयोग करने का एक तरीका है, लेकिन इसके बजाय hasPrefix:@"word"आप एक में संग्रहीत कई मूल्यों की जांच करते हैं NSArray? उदाहरण के लिए NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];:?
adamdehaven

^ ^ यहां मेरा प्रश्न देखें: stackoverflow.com/questions/18019660/…
adamdehaven

अच्छा उत्तर! धन्यवाद @Rob Keniger
गणेश गुटुरी

1
CFStringHasPrefix () का उपयोग "टोल फ्री ब्रिजिंग" के कारण NSStrings पर भी किया जा सकता है। CFStringHasPrefix () का प्रदर्शन 2-3 बार बेहतर लगता है (कम से कम मेरे डेटा सेट का उपयोग करते समय)। इसलिए यदि आप इसे एक प्रदर्शन संवेदनशील क्षेत्र में उपयोग कर रहे हैं, तो आप इसके बजाय CFStringHasPrefix () को आज़माना चाह सकते हैं।
जॉन बोवर्स

12

आप उपयोग कर सकते हैं:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}

3
आप यूनीचर्स को संदेश नहीं भेज सकते हैं, और वे संभवतः एनएसएसट्रेस के बराबर नहीं होंगे।
चक

8

हैप्रिफ़िक्स विशेष रूप से अच्छी तरह से काम करता है। उदाहरण के लिए यदि आप एक HTTP url की तलाश में थे NSString, तो आप http के साथ शुरू होने वाले तत्वों का पता लगाने के componentsSeparatedByStringलिए एक a NSArrayऔर aerate को बनाने के लिए उपयोग करेंगे hasPrefix

NSArray *allStringsArray = 
   [myStringThatHasHttpUrls componentsSeparatedByString:@" "]

for (id myArrayElement in allStringsArray) {
    NSString *theString = [myArrayElement description];
    if ([theString hasPrefix:@"http"]) {
        NSLog(@"The URL  is %@", [myArrayElement description]);
    }

}

hasPrefix एक बूलियन मान लौटाता है जो इंगित करता है कि क्या दिए गए स्ट्रिंग रिसीवर के शुरुआती वर्णों से मेल खाते हैं।

- (BOOL)hasPrefix:(NSString *)aString, 

पैरामीटर aStringएक स्ट्रिंग है जिसे आप रिटर्न वैल्यू के लिए देख रहे हैं यदि हाँ, तो स्ट्रिंग रिसीवर के शुरुआती वर्णों से मेल खाती है, अन्यथा नहीं। aStringखाली होने पर रिटर्न नहीं ।


4

का उपयोग करें characterAtIndex:। यदि पहला वर्ण तारांकन है, substringFromIndex:तो स्ट्रिंग '' * प्राप्त करने के लिए उपयोग करें।


4
NSString *stringWithoutAsterisk(NSString *string) {
    NSRange asterisk = [string rangeOfString:@"*"];
    return asterisk.location == 0 ? [string substringFromIndex:1] : string;
}

4

एक और दृष्टिकोण यह करने के लिए ..

क्या यह किसी की मदद कर सकता है ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}

3

अधिक सामान्य उत्तर के रूप में, हैप्रिफ़िक्स विधि का उपयोग करके देखें। उदाहरण के लिए, नीचे दिया गया कोड यह देखने के लिए जांचता है कि क्या कोई स्ट्रिंग 10 से शुरू होती है, जो एक निश्चित समस्या की पहचान करने के लिए उपयोग किया जाने वाला त्रुटि कोड है।

NSString* myString = @"10:Username taken";

if([myString hasPrefix:@"10"]) {
      //display more elegant error message
}


0

यह अच्छा सा कोड मुझे संयोग से मिला, और मैंने अभी तक इसे स्टैक पर सुझाया है। यह केवल तभी काम करता है जब आप जिन पात्रों को हटाना या बदलना चाहते हैं, वे मौजूद हैं, जो कई परिदृश्यों में सुविधाजनक है। यदि वर्ण मौजूद नहीं है, तो यह आपके NSString को परिवर्तित नहीं करेगा:

NSString = [yourString stringByReplacingOccurrencesOfString:@"YOUR CHARACTERS YOU WANT TO REMOVE" withString:@"CAN either be EMPTY or WITH TEXT REPLACEMENT"];

इस तरह से मैं इसका उपयोग करता हूं:

//declare what to look for
NSString * suffixTorRemove = @"</p>";
NSString * prefixToRemove = @"<p>";
NSString * randomCharacter = @"</strong>";
NSString * moreRandom = @"<strong>";
NSString * makeAndSign = @"&";

//I AM INSERTING A VALUE FROM A DATABASE AND HAVE ASSIGNED IT TO returnStr
returnStr = [returnStr stringByReplacingOccurrencesOfString:suffixTorRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:prefixToRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:randomCharacter withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:moreRandom withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:makeAndSign withString:@"&"];

//check the output
NSLog(@"returnStr IS NOW: %@", returnStr);

यह एक लाइन एक में तीन क्रियाओं को करने के लिए सुपर आसान है:

  1. चरित्र के लिए अपने स्ट्रिंग की जाँच करता है / आप नहीं चाहते हैं
  2. आपको जो भी पसंद हो, उन्हें बदल सकते हैं
  3. आसपास के कोड को प्रभावित नहीं करता है

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