如何使被替换的NSString保留一些旧字符?

时间:2014-09-03 07:12:07

标签: ios objective-c time replace nsstring

我的应用会在“:”之后放置一个空格,以防用户忘记。像这样:

input = [input stringByReplacingOccurrencesOfString:@":" withString:@": "];

如果用英文输入,效果很好。它将“我的朋友们:詹姆斯......”变成“我的朋友们:詹姆斯......”,这很好。

但我遇到的问题是它还会在一段时间内广告空间。将“12:30”改为“12:30”。我可以制作一堆这些代码,并提供所有可能的修复,这太过分了。

input = [input stringByReplacingOccurrencesOfString:@": 0" withString:@":0"];

更简单的方法是什么?我试过了:

input = [input stringByReplacingOccurrencesOfString:@"\\b\\d\\d?:\\s\\d\\d\\b" withString:@"\\b\\d\\d?:\\d\\d\\b" options: NSRegularExpressionSearch range:NSMakeRange(0, [input length])];

但所有这一切都是将所有时间从“hh:mm”更改为“bdd?:ddb”,就是这样。如何使NSString替换保留以前的字符?就像我怎样才能让它保持与之前相同的数字?我想要改变的只是“:”在一段时间内成为“:”。

我尝试过使用NSNotFound的“if”语句,但它没有用。我想要它,如果它找到一个“hh:mm”格式,不添加空格,但如果没有,添加空格但不起作用。

2 个答案:

答案 0 :(得分:1)

你可以这样做..如果你有字符串的时间或只有没有数字的句子......

NSCharacterSet *s = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];

NSRange r = [input rangeOfCharacterFromSet:s];

if (r.location != NSNotFound) 
{
input = [input stringByReplacingOccurrencesOfString:@":" withString:@": "];
}

希望它可以帮助你..

答案 1 :(得分:1)

您使用的是最后一个版本,但您需要使用NSRegularExpression。以下内容应该为您完成整个过程(在冒号后添加空格,但不是夹在两位数之间或后面跟空格时):

NSString *input = @"My friends are:James, John. It's 10:30 right now.";
NSMutableString *workingString = [input mutableCopy];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(((?<!(\\b\\d\\d)):)|(:(?!(\\d\\d\\b))))(?!\\s)" options:0 error:nil];
[regex replaceMatchesInString:workingString options:0 range:NSMakeRange(0, [workingString length]) withTemplate:@": "];
input = [workingString copy];
NSLog(@"%@", input); // Prints "My friends are: James, John. It's 10:30 right now."