次の意味は何ですか:
...そして、StringTokenizer は正確に 5 つの空白文字のみを尊重します。
http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter
次の意味は何ですか:
...そして、StringTokenizer は正確に 5 つの空白文字のみを尊重します。
http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter
おそらく、デフォルトでは 、、スペース、TAB、およびフォームフィードでStringTokenizer
壊れることを意味します。最も単純なコンストラクターのソースから:\n
\r
this(str, " \t\n\r\f", false);
そこに 5 つの空白文字が表示されます。ただし、他のコンストラクターのいずれかを使用して独自の区切り文字を指定できるため、これは大した問題ではありません。StringTokenizer
他にもたくさんの問題があります。空白文字のデフォルト セットは、その心配が最も少ないものです。
これは、StringTokenizer
スペース、、、および.\n
\r
\t
\f
ここで指摘されているより大きな点は、これらの文字列の問題、特に空白と分割に関する Java API の予期しない動作のことだと思います。デフォルトでStringTokenizer
は空白を区切り文字として使用しますが、空白の非常にユニークな定義の下で使用されます (たとえば、Java API の他のすべての定義には行集計が含まれているようですが、デフォルトでは空白が使用されます)。StringTokenizer
ではない。ユーザーから渡された文字列に本当に空白があるのに分割されていない理由について、合理的に混乱する可能性があります。はい、リクエストを詳しく調べると、これが見つかります。Javadoc を掘り下げると、これがデフォルトの動作であることがわかります。そうです、作成時に別の文字セットを指定するだけです。あなたのStringTokenizer
、しかしそれはそれをそれほど煩わしくしません。
しかし、Guava の議論は、この 1 つのケースでの予期しない動作よりもさらに広く展開すると思います。一般に、Java API は空白を定義する方法に非常に一貫性がありませんCharMatcher.WHITESPACE
。Guava の著者である Kevin Bourrillion がまとめた、さまざまな定義をすべてここで確認してください。
それらが参照する「5 つの空白文字」は、スペース、\t、\r、\n、および \f であると想定しています。