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

时间:2017-10-27 10:37:02

标签: java string trim

java中的String.trim()删除ascii值小于或等于20(空格)的所有字符。

任何想法为什么Java这样做而不是只删除空格(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;
}

2 个答案:

答案 0 :(得分:8)

因为空间有许多不同的方法,除此之外&#34; &#34;空间特征。引用javadoc

  

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

javadoc在这里很清楚:它不是关于空间而是空格。会出现的事情是空洞的&#34; - 但实际上不同 &#34;空字符串。

换句话说:这是一种方便的方法。这些方法旨在提供用户确实需要/期望的功能。

提供仅适用空间的trim()方法绝对是反直觉。

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

答案 1 :(得分:1)

空格的ASCII字符代码实际上是32而不是20.但是如果你看一下32之前的各种字符,你会发现很多类型的空格,比如tab和回车。假设是普通用户想要删除字符串周围的所有空格。

为了完善@GhostCat给出的答案,这里有一个单行程,你可以选择只选择空间:

String input = "   Hello World!   ";
input = input.replaceAll("[ ]*(.*)[ ]*", "$1");
相关问题