我试图看看是否有一种简短的方法来执行以下操作:
我们说我有以下NSString:
@"123456 copy cat";
我需要删除“复制”之前的所有内容以及文本在变量之前的长度(取决于用户输入)
我知道我可以做一个无休止的for循环检查子字符串,但我希望有更快的方法
答案 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。