Java如何用字符串中的单个空格替换2个或多个空格并删除前导和尾随空格

标签 java regex string replace

在 Java 中寻找快速、简单的方法来更改此字符串

" hello     there   "

看起来像这样的东西

"hello there"

我用一个空格替换所有这些多个空格,除了我还希望字符串开头的一个或多个空格消失。

这样的事情让我部分地在那里

String mytext = " hello     there   ";
mytext = mytext.replaceAll("( )+", " ");

但不完全是。

最佳答案

试试这个:

String after = before.trim().replaceAll(" +", " ");

另见


没有 trim() 正则表达式

也可以只用一个 replaceAll 来做到这一点,但这比 trim() 解决方案的可读性差得多。尽管如此,这里提供它只是为了展示正则表达式可以做什么:

    String[] tests = {
        "  x  ",          // [x]
        "  1   2   3  ",  // [1 2 3]
        "",               // []
        "   ",            // []
    };
    for (String test : tests) {
        System.out.format("[%s]%n",
            test.replaceAll("^ +| +$|( )+", "$1")
        );
    }

有 3 个备选:

  • ^_+ : 字符串开头的任意空格序列
    • $1匹配替换,捕获空字符串
  • _+$ : 字符串末尾的任意空格序列
    • $1匹配替换,捕获空字符串
  • (_)+ :任何与上述都不匹配的空格序列,这意味着它在中间
    • $1 匹配和替换,捕获一个空格

另见

关于Java如何用字符串中的单个空格替换2个或多个空格并删除前导和尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932392/

相关文章:

java - af :Calendar component, 按列类型过滤

java - 如何在 OpenNLP 中使用自定义分割字符扩展 SentenceDetector?

java - 如何用java从客户端系统读取文件?我必须使用 wsdl 吗?

c - 列表未正确使用正则表达式管理的字符串

java - 如何在字符串中添加连续数字

java - 改变Java中数组的大小

python - 将使用以 '$' 结尾的正则表达式进行优化的向后搜索

javascript - 正则表达式留下不需要的空间

python - 从 Python 中的字符串列表处理函数

java:检查带有特殊字符的字符串,少数除外