2012-06-21 20 views
7

ठीक है, तो यह थोड़ा उलझन में है (मेरे लिए अच्छा)। मेरे पास एक स्ट्रिंग है जिसमें एक नंबर है जिसे मैं इससे बाहर करना चाहता हूं। मैंने इस नंबर को '/' से घिरा है ताकि मैं उस नंबर को बाद में प्राप्त कर सकूं।सीमा से बाहर सीमा के साथ substring?

* समाप्त एप्लिकेशन न आया हुआ अपवाद 'NSRangeException', कारण की वजह से:

if ([MYSTRING hasSuffix:@"mp"]) { 
     int start = 0; 
     int end = 0; 
     char looking = '/'; 
     for(int i=0; i < MYSTRING.length; i++){ 
      if (looking == [MYSTRING characterAtIndex:i]) { 
       if (start == 0) { 
        start = i; 
       } 
       else{ 
        end = i + 1; 
       } 
      } 
     } 
     NSLog(@"%@", MYSTRING); //When i NSLOG here i get '2012-06-21 03:58:00 +0000/1/mp', 1 is the number i want out of the string, but this number could also change to 55 or whatever the user has 
     NSLog(@"start: %i, end: %i", start, end); //When i NSLOG here i get 'start: 25, end: 28' 
     NSString *number = [MYSTRING substringWithRange:NSMakeRange(start, end)]; 
     number = [number stringByReplacingOccurrencesOfString:@"/" withString:@""]; 
     if ([number intValue] > numberInt) { 
      numberInt = [number intValue]; 
     } 

यह क्रैश हो रहा है और सांत्वना का कहना है:

यहाँ कैसे मैं इसे से बाहर नंबर मिल रहा है है : '- [__ NSCFString substringWithRange:]: रेंज या अनुक्रमणिका सीमा से' * पहले फेंक कॉल स्टैक: (0x1875d72 0x106ce51 0x1875b4b 0x184ea64 0x3a6c 0x1080713 0x1bf59 0x1bef1 0xd532e 0xd588c 0xd49f5 0x49a2f 0x49c42 0x290fe 0x1b3fd 0x17d2f39 0x17d2c10 0x17ebda5 0x17ebb12 0x181cb46 0x181bed4 0x181bdab 0x17d1923 0x17d17a8 0x18e71 0x200d 0x1f35) libC++ abi.dylib: एक अपवाद

फेंकने मेरी रेंज की गिनती से कहा जाता है, समाप्त करने, सीमा के भीतर है मैं न मैं क्यों मुझे यह त्रुटि मिल रही है?

किसी भी मदद की सराहना की जाएगी।

धन्यवाद

+0

कोई और शायद आपके प्रश्न का उत्तर जल्दी से उत्तर देने जा रहा है, लेकिन एक बात मैं a.s.p. को इंगित करना चाहता था। किसी भी चर के नाम पर सभी कैप्स (या पूंजीकरण) का उपयोग कभी नहीं किया गया था, जैसे "' MYSTRING' "। सभी कैप्स कॉन्स्टेंट्स के लिए उपयुक्त हो सकते हैं, लेकिन एक और पसंदीदा शैली एक के (या निचले मामले के) के साथ कॉन्स्टेंट को उपसर्ग करना है। –

+0

ओह मैंने केवल इतना किया है कि यह आपके लिए ध्यान देने योग्य है :), यह कोड – Jacob

उत्तर

24

आपका NSMakeRange (: सालेह के दृष्टिकोण को पूरा करने के लिए क्या आप

------ अद्यतन ------

आप इसे इस तरह वास्तव में क्या करना चाहिए चाहते का एक सरल तरीका है प्रारंभ, अंत) एनएसएमकेरेंज (प्रारंभ, अंत-शुरू) होना चाहिए;

+0

काम किया !! धन्यवाद – Jacob

2

मैं क्यों अपने इस दृष्टिकोण का उपयोग कर रहे हैं, लेकिन आईओएस एक स्ट्रिंग समारोह जो अन्य स्ट्रिंग के संबंध में एक स्ट्रिंग को अलग करती है और घटकों की एक सरणी देता है प्रदान करता है पता नहीं है। निम्नलिखित उदाहरण देखें:

NSString * str = @"dadsada/2/dsadsa"; 
NSArray *listItems = [str componentsSeparatedByString:@"/"]; 
NSString *component = [listItems objectAtIndex:1]; 

अब आपके घटक स्ट्रिंग में 2 स्टोर होना चाहिए।

+0

में ऐसा नहीं है, मुझे कभी पता नहीं था कि ऐसा कोई फ़ंक्शन था, क्या आप संभवतः मेरे उदाहरण के सापेक्ष थोड़ा सा कोड प्रदान कर सकते हैं ताकि मुझे यह समझने में मदद मिल सके कि कैसे वह काम काम करता है? जवाब के लिए धन्यवाद – Jacob

1

संकलक इस कोड में चलता है ...

else{ 
    end = i + 1; 
} 

... पाश के अंतिम चरण में है, यह अंत चर एक अधिक तो MYSTRING की श्रृंखला के लिए निर्धारित करता है। यही कारण है कि आपको वह त्रुटि मिल रही है। इसे ठीक करने के लिए, बस यह करें:

else{ 
    end = i; 
} 

आशा है कि इससे मदद मिलती है!

पीएस

NSMutableArray *occurencesOfSlashes = [[NSMutableArray alloc] init]; 
char looking = '/'; 
for(int i=0; i < MYSTRING.length; i++){ 
if ([MYSTRING characterAtIndex:i] == looking) { 
    [occurencesOfSlashes addObject:[NSNumber numberWithInt:i]]; 
} 
NSString *finalString = [MYSTRING substringWithRange:NSMakeRange([occurencesOfSlashes objectAtIndex:0],[occurencesOfSlashes objectAtIndex:1])]; 
+0

मैं अभी भी त्रुटि करते समय त्रुटि करता हूं:/ – Jacob

6

मुझे लगता है कि आपको एनएसएमकेरेेंज के सिंटैक्स में भ्रम है। यह इस

NSMakeRange(<#NSUInteger loc#>, <#NSUInteger len#>) 

<#NSUInteger loc#>: की तरह कुछ है यह जहां उठा या सबस्ट्रिंग शुरू करना चाहते से स्थान है।

<#NSUInteger len#>: यह आपके आउटपुट या सबस्ट्रिंग की लंबाई है।

उदाहरण:

Mytest12test

अब मैं

तो

pick'12 करने के लिए 'हैं:

NSString *[email protected]"Mytest12test"; 
NSString *x=[t substringWithRange:NSMakeRange(6, 2)] ; 

लंबाई के बजाय अपने कोड में आप अंत चरित्र के सूचकांक से गुजर रहे हैं यह तुम्हारी गलती है।

+0

ओह यह अधिक समझ में आता है – Jacob

+0

एनएसएमकेरेंज (<# NSUInteger loC#>, <#NSUInteger लेन #>) इसने बहुत स्पष्ट किया – Jasmeet

संबंधित मुद्दे