【问题标题】:Java Regex - reduce spaces in a stringJava Regex - 减少字符串中的空格
【发布时间】:2009-02-22 19:17:44
【问题描述】:

我没有时间了解正则表达式,我需要一个快速的答案。平台是 Java。

我需要字符串

"Some text   with  spaces"

...要转换成

"Some text with spaces"

即将2个或多个连续空格改为1个空格。

【问题讨论】:

  • 您的意思是只有空格,还是“任何连续的空白字符”(可能包括制表符等)?

标签: java regex


【解决方案1】:
String a = "Some    text  with   spaces";
String b = a.replaceAll("\\s+", " ");
assert b.equals("Some text with spaces");

【讨论】:

  • 这会用一个空格替换所有的单个空格,效率不是很高。仅当有两个或多个连续时才应替换。
  • @Chris - 不要过早开始优化正则表达式,我相信这就足够了。
  • 是的,这个解决方案的效率并不高,但只有当这个操作发生在性能热点内时才有意义。这绝对不值得投反对票。
  • 这是一个有效的观点,在这种情况下我总是会使用 \s{2,} 或等效的,但实际上,它并不那么重要。
  • 如果库已经对此进行了优化,只在多个空间上进行替换,我不会感到惊讶。这是可读的并且可以完成工作。
【解决方案2】:

如果我们专门讨论空间,您希望专门针对空间进行测试:

MyString = MyString.replaceAll(" +", " ");

使用 \s 将导致 所有空格 被替换 - 有时需要,有时不需要。

此外,仅匹配 2 个或更多的更简单方法是:

MyString = MyString.replaceAll(" {2,}", " ");

(当然,如果希望将任何空格替换为单个空格,这两个示例都可以使用\s。)

【讨论】:

  • 值得记住的是,您需要类似 myString = myString.replaceAll(" +", " ");否则它不会做任何有用的事情。
  • 确实 - 我想我只是复制了一个(现已删除)答案的格式,但会更正它。
【解决方案3】:

对于 Java(不是 javascript,不是 php,不是其他):

txt.replaceAll("\\p{javaSpaceChar}{2,}"," ")

【讨论】:

    【解决方案4】:

    您需要使用java.util.regex.Pattern 的常量以避免每次都重新编译表达式:

    private static final Pattern REGEX_PATTERN = 
            Pattern.compile(" {2,}");
    
    public static void main(String[] args) {
        String input = "Some text   with spaces";
        System.out.println(
            REGEX_PATTERN.matcher(input).replaceFirst(" ")
        );  // prints "Some text with spaces"
    }
    

    另一方面,Apache Commons Lang 在类StringUtils 中包含方法normalizeSpace

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2018-12-17
      • 1970-01-01
      • 2018-04-25
      • 2016-03-03
      相关资源
      最近更新 更多