2017-10-27 13 views
1

も削除します。javaのString.trim()は、ascii値が20以下のすべての文字を削除します。String.trim()は、Java内の空白だけでなく、

Javaのではなく、唯一のスペース(アスキー文字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

それは*空白を削除します*また、 'キャリッジリターンのような他の多くの文字が含まれています'または' line break'など – Lino

+0

先頭と末尾の空白が削除されたこの文字列のコピーを返します。先頭または末尾の空白がない場合はこの文字列を返します。最初の声明は間違っています。 – JKostikiadis

+0

スペースは20ではなくASCII文字コード32です。 –

答えて

8

を除去すること「」空白文字以外にも、空間を有する多くの異なる方法があるのでことをやった理由を任意のアイデア。 javadoc

先頭と末尾の空白を省略した文字列のコピーを返します。

Javadocはここに明確である:それはおよそスペースしかし空白ではありません。実際には "空"と表示されるものはと異なるから空の文字列です。

つまり、これは便利な方法です。そのような方法は、ユーザが必要とする/期待する機能を提供するように設計されている。

trim()メソッドを提供することは絶対に反するでしょう。

非常に典型的なシナリオは、いくつかの文字列を受け取ることです。ユーザーが入力することも、ファイルから読み取って行全体を表すこともできます。末尾のタブ、スペース、改行文字には関心がありません。したがって、Java言語の先祖は、これらの異なる文字すべてを簡単に取り除く方法を提供します。代わりにあなたがPPなど、trimSpaces()trimTabs()trimNewLines()を呼び出す。

+2

私は「見えないキャラクター」という言葉を使って同様のものを投稿しようとしていましたが、これも機能します! – AxelH

+1

大歓迎です;-) – GhostCat

+0

「空白」は1970年以来の共通の意味を持っています –

1

スペースのASCII文字コードは実際には32、いない20です。しかし、あなたは、32の前に来る文字の種類を見れば、あなたは多くの種類がありますタブやキャリッジリターンなどの空白。仮定は、平均的なユーザーが文字列を囲むそのような空白をすべて取り除きたいということです。ここ@GhostCatによって与えられた答えを四捨五入する

は、あなたが選択だけスペースをトリミングするために使用できるワンライナーです:

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

1つのupvote、コードの2行;-) – GhostCat