Objective-C - 用一个空格替换换行序列

时间:2012-07-06 10:58:03

标签: objective-c replace nsstring newline

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

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

4 个答案:

答案 0 :(得分:13)

试试这个:

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

这是它的工作原理:

  • 第一行按换行符分组
  • 第二行删除为一行中的多个分隔符插入的空项目
  • 第三行使用单个空格作为新分隔符
  • 将字符串连接回来

答案 1 :(得分:12)

比使用componentsSeparatedByCharactersInSet

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

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

  • 仅替换空格:[ ]+
  • 替换空格和标签:[ \\t]+
  • 替换空格,制表符和换行符:\\s+
  • 替换换行符:\\n+

答案 2 :(得分: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:@" "]);

答案 3 :(得分:0)

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

这个问题对正则表达式库有link,但也有NSRegularExpression