String.trim() 不仅删除 Java 中的空格

String.trim() removes not only spaces in Java

String.trim() in java 移除所有ascii值小于等于20的字符(space).

知道为什么 Java 这样做而不是只删除 space (ascii char 20)

public String trim() {
    int len = count;
    int st = 0;
    int off = offset;      /* avoid getfield opcode */
    char[] val = value;    /* avoid getfield opcode */

    while ((st < len) && (val[off + st] <= ' ')) {
        st++;
    }
    while ((st < len) && (val[off + len - 1] <= ' ')) {
         len--;
    }
    return ((st > 0) || (len < count)) ? substring(st, len) : this;
}

因为除了“”space字符之外,还有很多不同的方法可以让space。引用 javadoc:

Returns a copy of the string, with leading and trailing whitespace omitted.

javadoc 在这里很清楚:它不是关于 space 而是 white space。显示为 "empty" 的内容 - 但实际上与普通的 " " 空字符串 不同

换句话说:这是一个方便的方法。这些方法旨在提供用户执行的功能 need/expect。

提供仅适用于 space 的 trim() 方法绝对是违反直觉的。

一个非常典型的场景是:你收到一些字符串。它可以由用户输入,可以从文件中读取并代表整行。您对任何尾随制表符、spaces、换行符不感兴趣。因此,Java 语言之父为您提供了一种轻松摆脱所有这些不同字符的方法。而不是你调用 trimSpaces()trimTabs()trimNewLines() 等。pp.

space的ASCII字符编码实际上是32,而不是20。但是如果你看一下32之前的字符种类,你会发现很多类型的白色space,比如制表符和回车 return。假设是普通用户想要去除字符串周围的所有此类白色space。

为了完善@GhostCat 给出的答案,这里有一个单行代码,您可以使用它来选择性地 trim 仅 space:

String input = "   Hello World!   ";
input = input.replaceAll("[ ]*(.*)[ ]*", "");