【发布时间】:2012-07-06 20:03:43
【问题描述】:
如何用一个空格替换换行符 (\n) 序列。
即用户输入了一个双换行符(“\n\n”),我希望将其替换为一个空格(“”)。或者用户输入了三个换行符(“\n\n\n”),我希望它也替换为一个空格(“”)。
【问题讨论】:
标签: objective-c replace nsstring newline
如何用一个空格替换换行符 (\n) 序列。
即用户输入了一个双换行符(“\n\n”),我希望将其替换为一个空格(“”)。或者用户输入了三个换行符(“\n\n\n”),我希望它也替换为一个空格(“”)。
【问题讨论】:
标签: objective-c replace nsstring newline
试试这个:
NSArray *split = [orig componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
split = [split filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
NSString *res = [split componentsJoinedByString:@" "];
这就是它的工作原理:
【讨论】:
性能比使用 componentsSeparatedByCharactersInSet 高 3 倍
NSString *fixed = [original stringByReplacingOccurrencesOfString:@"\\n+"
withString:@" "
options:NSRegularExpressionSearch
range:NSMakeRange(0, original.length)];
可能的替代正则表达式模式:
[ ]+
[ \\t]+
\\s+
\\n+
【讨论】:
正如 wattson 所说,您可以使用 NSRegularExpression 执行此操作,但代码非常冗长,因此如果您想在多个地方执行此操作,我建议您使用辅助方法,甚至是 NSString 类别,使用类似 @987654323 的方法@ 或类似的东西。
NSString *string = @"a\n\na";
NSLog(@"%@", [[NSRegularExpression regularExpressionWithPattern:@"\\n+"
options:0
error:NULL]
stringByReplacingMatchesInString:string
options:0
range:NSMakeRange(0, [string length])
withTemplate:@" "]);
【讨论】:
使用正则表达式,例如“s/\n+/\w/”(将匹配 1 个或多个换行符并替换为单个空格的替换)
这个问题有一个link 到一个正则表达式库,但也有可用的 NSRegularExpression
【讨论】: