如何进行向后搜索以找到第二个空格/空白并用另一个字符串替换它?

时间:2010-12-23 00:59:00

标签: iphone objective-c c regex xcode

再次是我。我刚才问了类似的问题,但这个问题有点复杂。我打算使用RegexKitLite做我需要做的事情,但我相信这可以完成它。我有一个NSString,其中包含一些带空格/空格的单词,我想要得到最后一个单词左边的字符串中的最后一个空格。示例字符串如下:

NSString *string = @"Here is an example string HELLO ";

正如您在上面的字符串中看到的那样,字符串的最后部分有一个空格/空格。我希望能够获得HELLO左侧的空格/空白并用我自己的文本/字符串替换它。我正在使用NSString的NSBackwardsSearch,但它不起作用。

NSString *spaceReplacement = @"text that i want";
    NSString *replaced = [snipet [string rangeOfString:substring options:NSBackwardsSearch].location:@" " withString:spaceReplacement];
    NSLog(@"%@", replaced);

任何帮助都会有所帮助,我只是厌倦了试图解决这个问题,它让我疯狂。我想我可以用RegexKitLite做到这一点,但考虑到我正在使用的时间表,我的学习曲线对我来说太陡了。我很高兴Jacob R.让我使用NSString的方法: - )

3 个答案:

答案 0 :(得分:17)

此解决方案假设您的字符串末尾始终有空格...它应该转换

  

这是一个示例字符串HELLO

......来:

  

这是我想要的示例stringtext

......因为那是我理解你想做的事。

以下是代码:

NSString *string = @"Here is an example string HELLO ";

NSRange rangeToSearch = NSMakeRange(0, [string length] - 1); // get a range without the space character
NSRange rangeOfSecondToLastSpace = [string rangeOfString:@" " options:NSBackwardsSearch range:rangeToSearch];

NSString *spaceReplacement = @"text that i want";
NSString *result = [string stringByReplacingCharactersInRange:rangeOfSecondToLastSpace withString:spaceReplacement];

诀窍是使用[NSString rangeOfString:options:range:]方法。

注意:如果字符串末尾并不总是包含空格,则此代码可能会失败,您需要的代码更复杂一些。如果是这种情况,请告诉我,我会更新答案。

免责声明:我没有测试过代码,但它应该编译并正常工作。

答案 1 :(得分:1)

这样的事情应该有效:

NSString *string = @"Here is an example string HELLO ";

if ([string hasSuffix:@" "]) {
    NSString *spaceReplacement = @"text that i want";
    NSString *replacedString = [[string substringToIndex:
            [string length]] stringByAppendingString:spaceReplacement];
    NSLog(@"replacedString == %@", replacedString);
}

答案 2 :(得分:0)

解决@Senseful note

  

如果字符串末尾始终不包含空格,则此代码可能会失败,您需要的代码更复杂一些。如果是这种情况,请告诉我,我会更新答案。

我在代码中添加了一行,以帮助解决这种情况并使代码更具通用性:

s = "value=sahi"

d = {k+1: v for k, v in enumerate(s.split("=")[1])}

>>> {1: 's', 2: 'a', 3: 'h', 4: 'i'}