2013-08-16 98 views
-1

我想在字符'='後面過濾字符串。例如,如果8 + 9 = 17我的輸出應該是17.我可以使用NSScanner在'='之前過濾字符,如何做它的反向?我需要一個有效的方式來做到這一點,而無需使用componentsSeparatedByString或創建一個數組如何在iOS中的特定字符後過濾字符串?

+2

'componentsSeparatedByString'(in * my * opinion)是最常被濫用的方法之一。爲什麼創建一個數組?是不是'rangeOfString' +'substringFromIndex'更直接?但是SO回答者和讀者似乎很喜歡它! - 對不起,我不得不說一次。 –

+0

馬丁R是對的,但我不知道如何rangeOfString選項更好。我會建議接受@ rmaddy的回答,而不是我的回答,方法是按下答案下方的複選標記。 –

+0

您能否解釋爲什麼您對建議的解決方案不滿意(例如,使用'componentsSeparatedByString')? – Shai

回答

12

每個人似乎都喜歡用componentsSeparatedByString但這是相當無效的當你只想要一部分字符串時。

試試這個:

NSString *str = @"8+9=17"; 
NSRange equalRange = [str rangeOfString:@"=" options:NSBackwardsSearch]; 
if (equalRange.location != NSNotFound) { 
    NSString *result = [str substringFromIndex:equalRange.location + equalRange.length]; 
    NSLog(@"The result = %@", result); 
} else { 
    NSLog(@"There is no = in the string"); 
} 

更新:

注 - 這個具體的例子,如果只被做一次它在效率的差別可以忽略不計。

但一般來說,使用componentsSeparatedByString:將掃描整個字符串以查找每個分隔符的出現次數。然後它會創建一個包含所有子字符串的數組。當你需要這些子串中的大部分時,這很好。

當你只需要一個較大的字符串的一部分,這是非常浪費。沒有必要掃描整個字符串。沒有必要創建一個數組。沒有必要獲得所有其他子串。

+1

+1,因爲我已經有一個模糊的想法,你是對的。你能解釋一下相對的優點嗎?我建議OP接受你的回答而不是我的回答。 –

+0

請參閱我的更新以獲取解釋。 – rmaddy

8
NSArray * array = [string componentsSeparatedByString:@"="]; 
if (array) 
{ 
    NSString * desiredString = (NSString *)[array lastObject]; //or whichever the index 
} 
else 
{ 
    NSLog(@""); //report error - = not found. Of array could somehow be not created. 
} 

注: 雖然這是很受歡迎的分裂溶液中,它是唯一值得嘗試的,只要每串通過分隔字符串分隔是必需的。 rmaddy的回答提出了更好的機制,只要需要的只是獲得一小部分字符串。無論何時只需要一小部分字符串,都可以使用該方法代替此方法。

+1

這是一種非常低效的方式來獲得一個較大的字符串的一小塊。 – rmaddy

+0

這是簡單而有效的LOC。一定要+1! –

+0

檢查數組數然後如果([數組數]> 1)分配 NSString * desiredString =(NSString *)[array objectAtIndex:1]; //或者索引 } else { NSLog(@「」); //報告錯誤 - =未找到。數組可以以某種方式不被創建。 } – shyla

0

使用此:

NSString *a [email protected]"4+6=10"; 
    NSLog(@"%@",[a componentsSeparatedByString:@"="]) 

;

Log: Practice[7582:11303] (
     "4+6", 
     10 
    ) 
4

嘗試使用這一

 NSArray *arr = [string componentsSeparatedByString:@"="]; 
     if (arr.count > 0) 
     { 
      NSString * firstString = [arr objectAtIndex:0]; 
      NSString * secondString = [arr objectAtIndex:1]; 
      NSLog(@"First String %@",firstString); 
      NSLog(@"Second String %@",secondString); 
     } 

輸出

第一個字符串8 + 9

第二絃樂17

+1

如果字符串中沒有'=',這段代碼就會崩潰。 – rmaddy

+0

第一個NSLog應該是NSLog(@「First String%@」,firstString); –

+1

@PradeepReddyKyp感謝您的糾正。 –

相關問題