【问题标题】: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.我继续并更改了另一个问题的标题。现在也许其他人可以找到它。
  • 停止投票的人最近批评得太快了。而是乐于助人。

标签: java string whitespace


【解决方案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("\\s{2,}", " ").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("\\s{2,}", " ").trim(); 其中 str 是一个 String 变量,其中包含要从中删除空格的文本,并使用 trim 来表示前导和尾随空格 由于 cmets 而更新,因为我忘记用单个空格替换多个空格

      【讨论】:

      • 这将从字符串中删除所有空格。
      • @macmoonshine 不,不会。你太快投票和评论了。把你的枪收起来,伙计:)
      • 你在编辑答案之前被枪杀了——你现在已经死了;-)
      • @ScaryWombat 是的,人们最近批评得太快了。注意到很多新手被否决而不是帮助。这是可耻的。这应该是一个社区。投反对票的人是否纠正了投反对票?不。为什么不呢?
      • 你是什么意思?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 2011-02-25
      相关资源
      最近更新 更多