如何删除前导和尾随的空格以及字符串中的多个空格? [复制]

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 是的,人们最近批评得太快了。注意到很多新手被否决而不是帮助。这是可耻的。这应该是一个社区。投反对票的人是否纠正了投反对票?不。为什么不呢? 你是什么意思?

以上是关于如何删除前导和尾随的空格以及字符串中的多个空格? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java中仅删除字符串的尾随空格并保留前导空格?

C语言编程:输入字符串s,将s中的前导空格和尾随空格删去,中间连续多个空格缩减

如何删除 MySQL 字段中的前导和尾随空格?

将多个空间合并为单个空间;删除尾随/前导空格

如何删除前导和尾随空格?

如何取回使用 .trim 删除的所有原始前导和尾随空格? [复制]