दिलचस्प पोस्ट
सी प्रीप्रोसेसर "लिनक्स" शब्द को निरंतर "1" के रूप में क्यों समझाता है? एसक्यूएल सर्वर में स्ट्रिंग्स को जोड़ने के लिए ग्रुप का उपयोग कैसे करें? कस्टम निर्देश के अंदर मूल्यांकन किए गए गुणों को कैसे प्राप्त करें जब एक regex में जी अनुप्रयोग उपयोगी है? इकाई परीक्षणों के बारे में बात करते समय "डंप नहीं सूखना" क्या होता है? कैसे एक पॉपुलर / एक सी # सरणी एक मूल्य के साथ instantiate? जिपरअर्चिव अमान्य ज़िप फ़ाइल बनाता है मेरे पहचान कॉलम मूल्यों में अंतर क्यों है? एंड्रॉइड पर आप वरीयता गतिविधि और प्राथमिकता का टुकड़ा कैसे बनाते हैं? console.log () वास्तव में परिवर्तन से पहले एक चर के परिवर्तित मान को दर्शाता है मैं एक स्ट्रिंग को एक चर के साथ कैसे जोड़ूं? MySQL में स्ट्रिंग को जोड़ने के लिए ग्रुप द्वारा कैसे उपयोग करें? त्रुटि: सी स्टैक उपयोग सीमा के बहुत करीब है एंड्रॉइड: पहलू अनुपात बनाए रखते हुए स्क्रीन की चौड़ाई में एक छवि को कैसे फैलाना? स्विफ्ट में सबस्क्रिप्ट और सुपरस्क्रिप्ट का उपयोग कैसे करें

NSScanner का उपयोग कैसे करें?

मैंने अभी एप्स के एनएसएसकैनर के डॉक्यू को पढ़ा है। मैं उस स्ट्रिंग का पूर्णांक प्राप्त करने की कोशिश कर रहा हूं: @ "उपयोगकर्ता लॉग इन (3 प्रयास)"।

मुझे कोई उदाहरण नहीं मिल सकता है, कैसे कोष्ठकों के भीतर स्कैन करने के लिए कोई विचार?

यहां कोड है:

NSString *logString = @"user logged (3 attempts)"; NSScanner *aScanner = [NSScanner scannerWithString:logString]; [aScanner scanInteger:anInteger]; NSLog(@"Attempts: %i", anInteger); 

वेब के समाधान से एकत्रित समाधान "NSScanner का उपयोग कैसे करें?"

'स्ट्रिंग के कुछ निश्चित मूल्यों को पाने के लिए मैं यही करता हूं

पहले मुझे इस पद्धति को परिभाषित किया गया है

 - (NSString *)getDataBetweenFromString:(NSString *)data leftString:(NSString *)leftData rightString:(NSString *)rightData leftOffset:(NSInteger)leftPos; { NSInteger left, right; NSString *foundData; NSScanner *scanner=[NSScanner scannerWithString:data]; [scanner scanUpToString:leftData intoString: nil]; left = [scanner scanLocation]; [scanner setScanLocation:left + leftPos]; [scanner scanUpToString:rightData intoString: nil]; right = [scanner scanLocation] + 1; left += leftPos; foundData = [data substringWithRange: NSMakeRange(left, (right - left) - 1)]; return foundData; } 

फिर इसे कहते हैं।

 foundData = [self getDataBetweenFromString:data leftString:@"user logged (" rightString:@"attempts)" leftOffset:13]; 

leftOffset बाईं स्ट्रिंग के लिए वर्णों की संख्या है

एक आसान तरीका साफ हो सकता है लेकिन यह मेरा समाधान था

Ziltoid के समाधान काम करता है, लेकिन यह आपके द्वारा आवश्यकता से अधिक कोड है।

मुझे दिए परिस्थिति के लिए एनएसएसकेनर को शुरू करने पर परेशान नहीं होगा। NSCharacterSet और NSString आपको सभी की आवश्यकता होती है:

  NSString *logString = @"user logged (3 attempts)"; NSString *digits = [logString stringByTrimmingCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]]; NSLog(@"Attempts: %i", [digits intValue]); 

या स्विफ्ट में:

  let logString = "user logged (3 attempts)" let nonDigits = NSCharacterSet.decimalDigitCharacterSet().invertedSet let digits : NSString = logString.stringByTrimmingCharactersInSet(nonDigits) NSLog("Attempts: %i", digits.intValue) 

यहां NSScanner का उपयोग करना एक सरल समाधान है (हाँ, @एनएनआरस्पोरमैन वास्तव में एक साफ समाधान है!):

 NSString *logString = @"user logged (3 attempts)"; NSString *numberString; NSScanner *scanner = [NSScanner scannerWithString:logString]; [scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil]; [scanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&numberString]; NSLog(@"Attempts: %i", [numberString intValue]); 

NSLog आउटपुट:

 Attempts: 3 

NSScanner एक रैखिक स्कैनर है आपको उन चीजों के माध्यम से स्कैन करना होगा जिन्हें आप नहीं चाहते हैं कि आप क्या चाहते हैं।

आप [aScanner scanUpToCharactersInSet:[NSCharacterSet decimalDigitCharacterSet] intoString:NULL] संख्या वर्ण के लिए पिछले सब कुछ कूदने के लिए। फिर आप एक पूर्णांक में वर्ण को स्कैन करने के लिए [aScanner scanInteger:&anInteger] करते हैं

यहाँ reg- पूर्व उपयोग है

 NSString *logString = @"user logged (3 attempts)"; NSString * digits = [logString stringByMatching:@"([+\\-]?[0-9]+)" capture:1];