删除NSString中某个字符串之前的所有字符串内容

时间:2013-02-19 22:50:33

标签: objective-c xcode nsstring substring

我试图看看是否有一种简短的方法来执行以下操作:

我们说我有以下NSString:
@"123456 copy cat";

我需要删除“复制”之前的所有内容以及文本在变量之前的长度(取决于用户输入)

我知道我可以做一个无休止的for循环检查子字符串,但我希望有更快的方法

2 个答案:

答案 0 :(得分: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:]

答案 1 :(得分:2)

要删除部分字符串,您必须创建一个包含要保留的部分的新字符串,或者创建字符串的可变副本并对其进行修改。

创建一个包含以“copy”开头的部分的新字符串:

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:如果用户输入还包含单词“input”,则使用NSBackwardsSearch。