2013-02-19 60 views
0

我想看看是否有這樣做的一小段路前刪除所有字符串內容如下:在一個NSString某些字符串

讓說,我有以下的NSString:
@"123456 copy cat";

我需要刪除「複製」前的所有內容,並在文本的長度是可變的(取決於用戶輸入)

我知道我可以做無盡的循環來檢查子字符串,但我希望有更快的方法

+3

你不能從NSString中刪除任何東西。 – 2013-02-19 22:51:54

回答

12
NSString *string = @"123456 copy cat"; 
NSRange range = [string rangeOfString:@"copy"]; 
NSString *newString = [string substringFromIndex:range.location]; 

這就是簡單的答案。問題是你的用戶可能會輸入'複製'這個詞,然後呢?即使您通過這種方式獲得範圍:

NSRange range = [string rangeOfString:@"copy cat"]; 

您的用戶仍然有機會輸入該短語。當你進行額外的檢查時,它不再是一個「短路」。

編輯

不要忽視Chuck的中評優秀觀察使用:

-[NSString rangeOfString:options:]

+0

這是正確的,但這隻會與第一個「複製」實例一起工作,使它變得貪婪,你將不得不在循環中做它,看看它是否越來越短。 – 2013-02-19 23:01:05

+0

或使用正則表達式 – 2013-02-19 23:01:27

+3

@GradyPlayer:要使用最後一次出現的「copy」而不是第一個,只需使用'[string rangeOfString:@「copy」options:NSBackwardsSearch]'。無需循環。 – Chuck 2013-02-19 23:03:55

2

要刪除字符串的一部分,你將不得不創建一個包含一個新的字符串你想保留的部分,或者創建一個你的字符串的可變副本並修改它。

要創建一個包含部分開始與「複製」一個新的字符串:

NSString *input; 
NSString *output; 
NSRange copyRange; 

input = @"123456 copy cat"; 
copyRange = [input rangeOfString:@"copy"]; 
output = [input substringFromIndex:copyRange.location]; 

要創建一個可變的字符串,並刪除部分達到「複製」:

NSString *input; 
NSMutableString *output; 
NSRange copyRange; 

input = @"123456 copy cat"; 
output = [input mutableCopy]; 
copyRange = [output rangeOfString:@"copy"]; 
[output replaceCharactersInRange:NSMakeRange(0, copyRange.location) withString:@""]; 
[output autorelease]; // depending on what you want to do 

另請參閱關於使用rangeOfString的其他答案中的註釋:withOptions:with NSBackwardsSearch,以防用戶輸入中還包含單詞「input」。

相關問題