我正在尝试查看是否有一种简短的方法可以执行以下操作:
假设我有以下 NSString:
@"123456 copy cat";
我需要在“复制”之前删除所有内容以及文本可变之前的长度(取决于用户输入)
我知道我可能可以做一个无限循环来检查子字符串,但我希望有更快的方法
我正在尝试查看是否有一种简短的方法可以执行以下操作:
假设我有以下 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:]
要删除字符串的一部分,您要么必须创建一个包含要保留的部分的新字符串,要么创建字符串的可变副本并对其进行修改。
要创建一个包含以“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: 和 NSBackwardsSearch 的评论,以防用户输入还包含“输入”一词。