53

Java のドキュメントには、 の非推奨については何も言及されていないようですがStringTokenizer、ずっと前に非推奨になったという話をよく耳にします。バグ/エラーがあったために非推奨になったのでしょうか、それともString.split()単に全体的に使用する方が良いのでしょうか?

を使用するコードがいくつかあり、StringTokenizerそれを使用するようにリファクタリングすることを真剣に心配する必要があるString.split()のか​​ 、それとも非推奨は純粋に利便性の問題であり、私のコードは安全なのか疑問に思っています.

4

8 に答える 8

83
  1. Java 10 String Tokenizer -- 非推奨ではない
  2. Java 9 String Tokenizer -- 非推奨ではない
  3. Java 8 String Tokenizer -- 非推奨ではない
  4. Java 7 String Tokenizer -- 非推奨ではない
  5. Java 6 String Tokenizer -- 非推奨ではない
  6. Java 5 String Tokenizer -- 非推奨ではない

非推奨としてマークされていない場合、廃止されません。

于 2011-08-08T14:49:07.897 に答える
67

StringTokenizerの javadoc から:

StringTokenizer新しいコードでの使用は推奨されていませんが、互換性のために保持されているレガシー クラスです。この機能が必要な場合は、代わりに String の split メソッドまたは java.util.regex パッケージを使用することをお勧めします。

を見てString.split()比較するとStringTokenizer、関連する違いはString.split()、正規表現を使用しているのに対し、StringTokenizer逐語的な分割文字を使用していることです。したがって、単一の文字よりも複雑なロジック (たとえば、 split on \r\n) を使用して文字列をトークン化したい場合は、使用できませんが、使用StringTokenizerできますString.split()

于 2011-08-08T14:48:00.593 に答える
16

実際、StringTokenizer は非推奨ではありません。実際、StringTokenizer は String.split() よりも 4 倍高速であり、競技プログラミングでは多くの開発者によって使用されています。

ソース: - Javaの高速入力

于 2015-07-31T16:42:52.133 に答える
1

StringTokenizeに問題があります...

Split は正規表現を使用する必要があり、StringTokenizer は String または CharSequence を使用しています。

しかし

"a.b..".split(".") 戻ります{"a","b",""}

「ab」のStringTokenizer。... {"a","b"} のみを返します

そして、これは非常にトリッキーです!!! 注意してください!!!

StringTokenizer のより優れた安全な代替手段は次のとおりです。

はるかに優れStrongTokenizerているorg.apache.common.lang3...柔軟性がはるかに高いか、

com.google.common.base.Splitter

于 2014-07-09T09:43:07.640 に答える
0

その理由が String.split メソッドにあるとは思いません。分割は文字列を解析するのに時間がかかるためです。内部でパターンをコンパイルします。

StringTokenizer は、java.util.Scanner のようなより機能的なクラスに置き換えることができます。また、パターン マッチャーを使用して正規表現でグループを取得することもできます。

于 2011-08-08T15:10:11.687 に答える
0
  1. StringTokenizer は非推奨ではありません

  2. 機能や出力が少し違うのですが・・・

たとえば、それを 、 、および"aaa.aa.aa"の部分に分割したい場合は、次のように記述できます。"aaa""aa""a"

new StringTokenizer("aaa.aa.aa", ".")

あなただけを使用する場合:

"aaa.aa.aa".split(".")

が空白文字である正規表現に一致するため、空の配列を返します。.だからあなたはそれをエスケープする必要があります:

"aaa.aa.aa".split("\\.")

基本的に..分割すると正規表現を使用できます...非常に便利です

しかし、StringTokenizer はテキストをトークンで解析します ... トークンは特殊文字でさえあります

于 2014-06-10T10:35:54.497 に答える
-3

個人的には、StringTokenizer は非常に単純なことを行うための複雑な方法であったため、非推奨になったと感じています。名前が示すように、StringTokenizer は文字列にのみ適用されるため、文字列のメソッドにしないのはなぜですか。さらに、StringTokenizer は正規表現をサポートしていませんでした。正規表現は、90 年代後半から 2000 年代前半にかけて非常に一般的になった正規表現をサポートしていないため、実質的に役に立たなくなりました。

于 2011-08-08T14:52:12.263 に答える