在字符串中去除空格的最佳方法

5

如何在考虑性能的情况下将内部空格修剪为仅保留一个空格?

Input:
     AA     BB
Output:
AA BB

Input:
A      A
Output:
A A
5个回答

11
System.out.println("     AA     BB".replaceAll("\\s+", " ").trim());

输出:

AA BB

注意:与此处其他一些解决方案不同,这个解决方案还将单个制表符替换为单个空格。如果您没有任何制表符,则可以使用 "{2,}" 代替,这将更快:

System.out.println("     AA     BB".replaceAll(" {2,}", " ").trim());

7

将两个或多个空格 "\\s{2,}" 替换为一个空格 " ",然后进行 trim() 操作以去除前导和尾随空格,就像您在第一个示例中展示的那样。

output = input.replaceAll("\\s{2,}", " ").trim();

2
s = s.replaceAll("\\s+", " " ).trim();

0

"Hello a a g g a   gag gs    gs@".replaceAll( "[ ]+{2}", " ") ).trim();

的翻译内容为:

0

这里有正确的答案,例如:

s = s.replaceAll("\\s+", " " ).trim();

但我认为选择正确的问题也很重要。与其询问如何使用正则表达式修剪String,不如直接询问如何修剪String,并允许回答者展示最佳策略。

可能有比使用正则表达式折叠空格更好的方法。当然还有其他方法。


问题已经被编辑过了。现在可以请您展示一个更好的方法吗?谢谢。 - Alex Gomes
我并不是想暗示有一种无可争议的更好的方法。如果我知道,我肯定会告诉你,而不是坚持要先改变问题。我只是想指出,你可能基于正确策略的假设来限制响应的可能性。我认为,除非你有非常强烈的性能原因想要尝试其他选择,否则正则表达式路线可能是我会选择的。 - roryparle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接