【问题标题】:java replaceAll and '+' matchjava replaceAll 和 '+' 匹配
【发布时间】:2011-12-14 04:21:38
【问题描述】:

我有一些代码设置来删除标题单词之间的多余空格

String formattedString = unformattedString.replaceAll(" +"," ");

我对这种正则表达式的理解是,它会在停止之前匹配尽可能多的空格。但是,我出来的琴弦并没有以任何方式改变。是否有可能一次只匹配一个空格,然后用空格替换它? replaceAll 方法是否有什么东西,因为它正在执行多个匹配,这会改变这种匹配类型在这里的工作方式?

【问题讨论】:

  • 它应该可以工作,但请确保您没有其他空格。
  • 你能发布更多代码吗?
  • 我很抱歉,伙计们;事实证明,我在 try/catch 的 catch 中进行了替换,我很快就得出了关于正则表达式的结论,实际上我的代码并没有达到目标。
  • 我可以吗?它告诉我我不能。

标签: java regex


【解决方案1】:

更好的方法可能是使用"\\s+" 来匹配所有可能的空白字符。

编辑

另一种方法可能是提取"\\b([A-Za-z0-9]+)\\b" 的所有匹配项,然后使用空格将它们连接起来,这样您就可以删除除有效单词和数字之外的所有内容。

如果您需要保留标点符号,请使用"(\\S+)",它将捕获所有非空白字符的运行。

【讨论】:

    【解决方案2】:

    你确定你的字符串是空格而不是制表符吗?以下是对空格更“激进”的内容。

    String formattedString = unformattedString.replaceAll("\\s+"," ");
    

    【讨论】:

      【解决方案3】:

      所有响应都应该有效。

      两者:

      String formattedString = unformattedString.replaceAll(" +"," ");
      

      String formattedString = unformattedString.replaceAll("\\s+"," ");
      

      也许您的 unformattedString 是一个多行表达式。在这种情况下,您可以实例化一个 Pattern 对象

      String unformattedString = "  Hello \n\r\n\r\n\r     World";
      Pattern manySpacesPattern = Pattern.compile("\\s+",Pattern.MULTILINE);
      Matcher formatMatcher = manySpacesPattern.matcher(unformattedString);
      String formattedString = formatMatcher.replaceAll(" ");
      System.out.println(unformattedString.replaceAll("\\s+", " "));
      

      或者 unformattedString 可能有特殊字符,在这种情况下,您可以在编译方法中使用模式标志。 例子:

      Pattern.compile("\\s+",Pattern.MULTILINE|Pattern.UNIX_LINES);
      

      Pattern.compile("\\s+",Pattern.MULTILINE|Pattern.UNICODE_CASE);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多