[英]String.trim() removes not only spaces in Java
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;
}
因為除了那個“”空格字符外,還有很多其他方法來留空 。 引用javadoc :
返回字符串的副本,省略前導和尾隨空格。
Javadoc在這里很清楚:它與空格無關,而與空格有關 。 會顯示為“空”的東西-但實際上與純空字符串不同。
換句話說:這是一種方便的方法。 此類方法旨在提供用戶確實需要/期望的功能。
提供僅適用於空格的trim()
方法絕對是違反直覺的。
一個非常典型的情況是:您收到一些字符串。 它可以由用戶輸入,也可以從文件中讀取並代表整行。 您對任何結尾的制表符,空格,換行符都不感興趣。 因此,Java語言之父為您提供了一種輕松擺脫所有這些不同字符的方法。 而不是您調用trimSpaces()
, trimTabs()
, trimNewLines()
等。
空格的ASCII字符代碼實際上是32,而不是20。但是,如果查看32之前的各種字符,則會發現許多類型的空格,例如制表符和回車符。 假設是普通用戶希望剝離字符串周圍的所有此類空白。
為了完善@GhostCat給出的答案,這里提供了一種方法,您可以使用它來選擇性地僅修剪空間:
String input = " Hello World! ";
input = input.replaceAll("[ ]*(.*)[ ]*", "$1");
下面的單行作品。 @Tim Biegeleisen 給出的那個不會刪除尾隨空格。
String input = " Hello World! ";
input = input.replaceFirst("^\\s++", "").replaceFirst("\\s++$","");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.