我想看看是否有這樣做的一小段路前刪除所有字符串內容如下:在一個NSString某些字符串
讓說,我有以下的NSString:
@"123456 copy cat";
我需要刪除「複製」前的所有內容,並在文本的長度是可變的(取決於用戶輸入)
我知道我可以做無盡的循環來檢查子字符串,但我希望有更快的方法
我想看看是否有這樣做的一小段路前刪除所有字符串內容如下:在一個NSString某些字符串
讓說,我有以下的NSString:
@"123456 copy cat";
我需要刪除「複製」前的所有內容,並在文本的長度是可變的(取決於用戶輸入)
我知道我可以做無盡的循環來檢查子字符串,但我希望有更快的方法
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:]
這是正確的,但這隻會與第一個「複製」實例一起工作,使它變得貪婪,你將不得不在循環中做它,看看它是否越來越短。 – 2013-02-19 23:01:05
或使用正則表達式 – 2013-02-19 23:01:27
@GradyPlayer:要使用最後一次出現的「copy」而不是第一個,只需使用'[string rangeOfString:@「copy」options:NSBackwardsSearch]'。無需循環。 – Chuck 2013-02-19 23:03:55
要刪除字符串的一部分,你將不得不創建一個包含一個新的字符串你想保留的部分,或者創建一個你的字符串的可變副本並修改它。
要創建一個包含部分開始與「複製」一個新的字符串:
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」。
你不能從NSString中刪除任何東西。 – 2013-02-19 22:51:54