0

我正在尝试查看是否有一种简短的方法可以执行以下操作:

假设我有以下 NSString:
@"123456 copy cat";

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

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

4

2 回答 2

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:]

于 2013-02-19T22:59:12.193 回答
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: 和 NSBackwardsSearch 的评论,以防用户输入还包含“输入”一词。

于 2013-02-19T23:06:13.210 回答