10

如何用一个空格替换换行符 (\n) 序列。

即用户输入了一个双换行符(“\n\n”),我希望将其替换为一个空格(“”)。或者用户输入了三个换行符(“\n\n\n”),我希望它也替换为一个空格(“”)。

4

4 回答 4

14

尝试这个:

NSArray *split = [orig componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
split = [split filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
NSString *res = [split componentsJoinedByString:@" "];

这是它的工作原理:

  • 第一行由换行符分割
  • 第二行删除为一行中的多个分隔符插入的空项目
  • 第三行使用单个空格作为新分隔符将字符串连接回来
于 2012-07-06T11:03:07.513 回答
13

性能是使用的 3 倍componentsSeparatedByCharactersInSet

NSString *fixed = [original stringByReplacingOccurrencesOfString:@"\\n+"
                                                     withString:@" "
                                                        options:NSRegularExpressionSearch
                                                          range:NSMakeRange(0, original.length)];

可能的替代正则表达式模式:

  • 仅替换空格:[ ]+
  • 替换空格和制表符:[ \\t]+
  • 替换空格、制表符和换行符:\\s+
  • 替换换行符:\\n+
于 2014-04-28T08:57:34.260 回答
3

正如 wattson 所说,您可以这样做,NSRegularExpression但代码非常冗长,因此如果您想在多个地方执行此操作,我建议您使用辅助方法,甚至NSString使用类似方法或类似方法的类别-[NSString stringByReplacingMatchingPattern:withString:]

NSString *string = @"a\n\na";
NSLog(@"%@", [[NSRegularExpression regularExpressionWithPattern:@"\\n+"
                                                        options:0
                                                          error:NULL]
              stringByReplacingMatchesInString:string
              options:0
              range:NSMakeRange(0, [string length])
              withTemplate:@" "]);
于 2012-07-06T11:11:46.147 回答
0

使用正则表达式,例如“s/\n+/\w/”(将匹配 1 个或多个换行符并替换为单个空格的替换)

这个问题有一个正则表达式库的链接,但也有 NSRegularExpression 可用

于 2012-07-06T11:02:42.960 回答