簡體   English   中英

String.trim() 不僅刪除 Java 中的空格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM