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;
}
答案 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");