【问题标题】:Objective-C – Replace newline sequences with one spaceObjective-C - 用一个空格替换换行符
【发布时间】:2012-07-06 20:03:43
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c replace nsstring newline


    【解决方案1】:

    试试这个:

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

    这就是它的工作原理:

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

    【讨论】:

    • 谢谢,接受您的回答是为了便于阅读。
    【解决方案2】:

    性能比使用 componentsSeparatedByCharactersInSet 高 3 倍

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-04
          • 1970-01-01
          • 2011-10-13
          • 1970-01-01
          • 2013-05-30
          • 2014-10-10
          • 2011-09-15
          相关资源
          最近更新 更多