Java String.trim()删除了多少个空格?

one*_*eat 118 java string trim

在Java中,我有一个像这样的字符串:

"     content     ".
Run Code Online (Sandbox Code Playgroud)

String.trim()移除这些侧面上的所有空间或每个空间仅一个空间?

Luk*_*keH 168

所有这些.

返回:删除前导和尾随空格的此字符串的副本,如果没有前导或尾随空格,则返回此字符串.

〜引自Java 1.5.0 docs

(但你为什么不试试看自己呢?)

  • @ user2864740:这个答案不是要对`trim`,`isWhiteSpace等等进行全面分析,要么是对Java文档中含糊不清的讨论; 这是上面提到的具体问题的直接答案 - 即,`trim`方法是删除单个空格还是多个空格? (7认同)

glm*_*ndr 33

从源代码(反编译):

  public String trim()
  {
    int i = this.count;
    int j = 0;
    int k = this.offset;
    char[] arrayOfChar = this.value;
    while ((j < i) && (arrayOfChar[(k + j)] <= ' '))
      ++j;
    while ((j < i) && (arrayOfChar[(k + i - 1)] <= ' '))
      --i;
    return (((j > 0) || (i < this.count)) ? substring(j, i) : this);
  }
Run Code Online (Sandbox Code Playgroud)

while你可以看到的两个意思是删除了unicode在开头和结尾的空格字符之下的所有字符.


dfa*_*dfa 27

如有疑问,请编写单元测试:

@Test
public void trimRemoveAllBlanks(){
    assertThat("    content   ".trim(), is("content"));
}
Run Code Online (Sandbox Code Playgroud)

注意:当然测试(对于JUnit + Hamcrest)并没有失败

  • 问一个新的程序员刚刚学会了如何做一个System.out.println进行单元测试,看看结果是什么...... (43认同)

Thi*_*ilo 26

但有一点需要指出的是,String.trim有一个奇特的"空白"定义.它不会删除Unicode空格,但也会删除您可能不会考虑空格的ASCII控制字符.

此方法可用于从字符串的开头和结尾修剪空白; 实际上,它也会修剪所有ASCII控制字符.

如果可能,您可能希望使用Commons Lang的StringUtils.strip(),它也处理Unicode空白(并且也是空安全的).

  • 似乎是对设计师部分的可怕疏忽......而且文档过于技术化的工作并没有多大帮助. (3认同)
  • @MarkMcKenna:我一直发现这些超级简单的编程问题(修剪字符串,查找文件扩展名等)*总是*具有隐藏的复杂性.这对我们的工艺和工具有点失望. (3认同)
  • 好样的!你接受了有关StackOverflow的最简单的问题,发现了一些聪明的话题.你是比赛的功劳. (2认同)

Juh*_*älä 15

请参阅String类的API:

返回字符串的副本,省略前导和尾随空格.

双方的空白被删除:

注意,trim()不会更改String实例,它会返回一个新对象:

 String original = "  content  ";
 String withoutWhitespace = original.trim();

 // original still refers to "  content  "
 // and withoutWhitespace refers to "content"
Run Code Online (Sandbox Code Playgroud)


Bri*_*itc 13

基于此处的Java文档,.trim()替换'\ u0020',通常称为空格.

但请注意,'\ u00A0'(Unicode NO-BREAK SPACE &nbsp;)也被视为空白,并且.trim()不会删除它.这在HTML中尤为常见.

要删除它,我使用:

tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0", "");
Run Code Online (Sandbox Code Playgroud)

这里讨论了这个问题的一个例子.


Unm*_*eni 8

Java trim()删除空格的示例:

public class Test
{
    public static void main(String[] args)
    {
        String str = "\n\t This is be trimmed.\n\n";

        String newStr = str.trim();     //removes newlines, tabs and spaces.

        System.out.println("old = " + str);
        System.out.println("new = " + newStr);
    }
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT

old = 
 This is a String.


new = This is a String.
Run Code Online (Sandbox Code Playgroud)