目标C - 与一个空间替换换行序列(Objective-C – Replace newline s

2019-06-26 02:07发布

我怎么能替换换行符(\ n)序列的一个空间。

即用户已经进入了一个双换行符(“\ n \ n”)我想是替换为一个空格(”“)。 或者用户已经进入三联换行符(“\ n \ n \ n”)我想是替换也有一个空格(”“)。

Answer 1:

试试这个:

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

这是如何工作的:

  • 第一条线分割的换行符
  • 二线删除连续插入多个分隔空项目
  • 三线连接字符串后面使用一个单一的空间作为新的分隔符


Answer 2:

3倍比使用更高性能componentsSeparatedByCharactersInSet

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

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

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


Answer 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:@" "]);


Answer 4:

使用正则表达式,类似“S / \ N + / \ W /”(一个替换将匹配1个或多个新行字符,并用一个空格替换)

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



文章来源: Objective-C – Replace newline sequences with one space