String
クラスのString[] split(String)
を使用して、特定の区切り文字の文字列を分割しましたが、正常に機能しました。
ただし、現在はStringTokenizer
を使用して同じロジックをリファクタリングすることが期待されています。しかし、どちらを使用する場合の違いと利点は何ですか。
また、1回の呼び出しでsplit()
によって返されるString[]
は、クラスStringTokenizer
のオブジェクトを使用するよりもはるかに効率的なオプションであると感じています。
-> String.split()
およびPattern.split()
は、後者を実行するための簡単な構文を提供しますが、基本的にはそれだけです。結果の文字列を解析したい場合、または特定のトークンに応じて区切り文字を途中で変更したい場合、それらはあなたを助けません。
-> StringTokenizer
はString.split()
よりもさらに制限的であり、使用するのが少し面倒です。基本的に、固定部分文字列で区切られたトークンを引き出すために設計されています。この制限のため、String.split()
の約2倍の速度です。 (私の String.split()
とStringTokenizer
の比較 を参照してください。)また、正規表現APIの前にあり、そのString.split()
は一部です。
String.split()
は、通常のマシンでは数ミリ秒で数千の文字列をトークン化できます。さらに、StringTokenizer
に比べて、出力を文字列配列として提供するという利点があります。これは通常、必要なものです。 Enumeration
で提供されるStringTokenizer
を使用することは、ほとんどの場合「構文的に面倒」です。この観点から、StringTokenizer
は最近ではスペースの無駄遣いであり、String.split()
を使用することもできます。
このリンクからの回答
JavaDocs を見てください
StringTokenizerは、互換性のために保持されているレガシークラスですが、新しいコードでは使用を推奨していません。この機能を探している人は、代わりにStringのsplitメソッドまたはJava.util.regexパッケージを使用することをお勧めします。
次の例は、String.splitメソッドを使用して、文字列を基本トークンに分割する方法を示しています。
String[] result = "this is a test".split("\\s"); for (int x=0; x<result.length; x++) System.out.println(result[x]);
String#split
は、StringTokenizer
が文字列を分割するString
を受け入れるかどうかにかかわらず、正規表現を受け入れます。常にString#split
、StringTokenizerよりも堅牢です。
読み取り this
StringTokenizerは、互換性のために保持されているレガシークラスですが、新しいコードでは使用を推奨していません。この機能を探している人は、代わりにStringのsplitメソッドまたはJava.util.regexパッケージを使用することをお勧めします。
私は次のプログラムを持っています
文字列「x」は12s34で区切られたタブです。
public class Testoken {
public static void main(String[] args) {
String x = "1 2 s 3 4 ";
StringTokenizer st = new StringTokenizer(x,"\t");
int i = 0;
while(st.hasMoreTokens()){
System.out.println("token-->"+st.nextToken());
i++;
}
System.out.println("i-->"+i);//elements from tokenizer
String [] a = x.split("\t");
System.out.println("length--->"+a.length);
for(int y = 0;y<a.length;y++){
System.out.println("value-->"+a[y]);//elements from split
}
}
}
Output:
token-->1
token-->2
token-->s
token-->3
token-->4
i-->5
length--->8
value-->1
value-->2
value-->s
value-->
value-->3
value-->
value-->
value-->4
http://docs.Oracle.com/javase/6/docs/api/Java/util/StringTokenizer.html say:
StringTokenizerは、互換性のために保持されているレガシークラスですが、新しいコードでは使用を推奨していません。この機能を探している人は、代わりにStringのsplitメソッドまたはJava.util.regexパッケージを使用することをお勧めします。
だから私は、それを変更せずに、リファクタリングを推奨した人にその行を示すと言うでしょう。たぶん、彼らは古い情報か、あなたに伝えるもう一つの正当な理由を持っています。
(私の観点から)質問に回答するリンクを次に示します。 http://lavnish.blogspot.com/2008/05/stringsplit-vs-stringtokenizer.html