如何删除前导和尾随的空格以及字符串中的多个空格? [复制]
Posted
技术标签:
【中文标题】如何删除前导和尾随的空格以及字符串中的多个空格? [复制]【英文标题】:how to remove white spaces at leading and trailing as well as multiple spaces in the string? [duplicate] 【发布时间】:2018-02-12 07:13:46 【问题描述】:For ex: "__I_love___India___";
在这个字符串中,我想完全删除前导和尾随空格以及 java 中字符串中的多个空格。
即输出应该是
"I love India
";
【问题讨论】:
谷歌搜索“java regex remove extra spaces”返回Java how to replace 2 or more spaces with single space in string and delete leading spaces only的第一个结果 您可以使用replaceAll()
将多个空格替换为单个空格,并使用trim()
去除前导和尾随空格。但请注意在您的问题中使用“请提供代码”,因为您不是我们的雇主,我们也不是代码编写服务。这通常会让你投反对票。我已经给了你一些强有力的提示,现在去查找 javadoc 并自己完成剩下的工作。
@fjoe 请注意,如果我想删除前导空格和尾随空格,并发现谷歌点击“仅删除前导空格”,我可能不会看这个问题。事实证明给出了正确的答案,但是那个问题的发布者把标题搞砸了。
P.S.我继续并更改了另一个问题的标题。现在也许其他人可以找到它。
停止投票的人最近批评得太快了。而是乐于助人。
【参考方案1】:
另一种方法是使用带有空格的 StringTokenizer 作为标记分隔符。读取每个令牌并将其写回 StringBuilder。
import java.util.*;
class Words
/**
* Convenience method.
*/
public static StringBuilder deduplicateSpaces(String text)
return deduplicateDelimiters(text, " ");
public static StringBuilder deduplicateDelimiters(String text, String delim)
StringTokenizer st = new StringTokenizer(text, delim);
StringBuilder sb = new StringBuilder();
boolean firstRun = true;
while (st.hasMoreTokens())
sb.append(firstRun? "" : delim) //prevent delimiter on the first token
.append(st.nextToken() ); //append token itself
if (firstRun) firstRun = false;
return sb;
public static void main (String[] args)
String textS = " A bbbb ccccc ";
String textU = "____A_____bbbb____ccccc___";
System.out.println(deduplicateSpaces(textS));
System.out.println(deduplicateDelimiters(textU, "_"));
输出是:
A bbbb ccccc
A_bbbb_ccccc
【讨论】:
我没有投反对票,因为这是一个想法(可能有点低级),但是如果有一个小例子来回答这个问题会很好。 @AxelH 完全正确。【参考方案2】:您可以尝试以下方法之一:
纯 Java -String after = before.trim().replaceAll("\\s+", " ");
纯Java - String after = before.replaceAll("\\s2,", " ").trim();
Apache commons lang3 - String after = StringUtils.normalizeSpace(String str);
...
【讨论】:
【参考方案3】:试试这个逻辑:
String input = "I love India ";
input = input.trim().replaceAll("\\s+", " ");
这里的想法是使用两个单独的操作来处理开头/结尾的空格和单词之间的空格。我们希望完全删除开头/结尾的空格,String#trim()
做得很好。然后,单词之间应该只出现一个空格,并且正则表达式替换处理这种情况。
【讨论】:
【参考方案4】:方法trim ()
删除前导和尾随空格。为了从字符串中间删除重复的空格,您可以使用正则表达式。
s2 = s1.replaceAll("\\s+", "").trim ();
【讨论】:
谢谢亚历克斯。但力想使用内置方法。相反,我想使用用户定义的方法来删除前导空格【参考方案5】:试试replaceAll("\\s2,", " ").trim();
其中 str 是一个 String 变量,其中包含要从中删除空格的文本,并使用 trim 来表示前导和尾随空格
由于 cmets 而更新,因为我忘记用单个空格替换多个空格
【讨论】:
这将从字符串中删除所有空格。 @macmoonshine 不,不会。你太快投票和评论了。把你的枪收起来,伙计:) 你在编辑答案之前被枪杀了——你现在已经死了;-) @ScaryWombat 是的,人们最近批评得太快了。注意到很多新手被否决而不是帮助。这是可耻的。这应该是一个社区。投反对票的人是否纠正了投反对票?不。为什么不呢? 你是什么意思?以上是关于如何删除前导和尾随的空格以及字符串中的多个空格? [复制]的主要内容,如果未能解决你的问题,请参考以下文章