【问题标题】:removing all the string content before a certain string in an NSString删除 NSString 中某个字符串之前的所有字符串内容
【发布时间】:2013-02-19 22:50:33
【问题描述】:

我正在尝试查看是否有执行以下操作的捷径:

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

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

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

【问题讨论】:

  • 你不能从 NSString 中删除任何东西。

标签: objective-c xcode nsstring substring


【解决方案1】:
NSString *string = @"123456 copy cat";
NSRange range = [string rangeOfString:@"copy"];
NSString *newString = [string substringFromIndex:range.location];

这就是简单的答案。问题是您的用户可能会输入“复制”这个词,然后呢?即使您以这种方式获得范围:

NSRange range = [string rangeOfString:@"copy cat"];

您的用户仍有可能输入该短语。当您进行额外检查时,它不再是“捷径”。

编辑

不要忽视 Chuck 在 cmets 中的出色观察:

-[NSString rangeOfString:options:]

【讨论】:

  • 这是正确的,但这仅适用于第一个实例“复制”以使其变得贪婪,您必须循环执行它,看看它是否越来越短。
  • @GradyPlayer:要使用“copy”的最后一次出现而不是第一次出现,只需使用[string rangeOfString:@"copy" options:NSBackwardsSearch]。不需要循环。
【解决方案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

如果用户输入还包含单词“input”,请参阅其他答案中关于使用 rangeOfString:withOptions: 和 NSBackwardsSearch 的 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多