web-dev-qa-db-ja.com

StringTokenizerとString.split()の使用の違いは?

StringクラスのString[] split(String)を使用して、特定の区切り文字の文字列を分割しましたが、正常に機能しました。

ただし、現在はStringTokenizerを使用して同じロジックをリファクタリングすることが期待されています。しかし、どちらを使用する場合の違いと利点は何ですか。

また、1回の呼び出しでsplit()によって返されるString[]は、クラスStringTokenizerのオブジェクトを使用するよりもはるかに効率的なオプションであると感じています。

14
Satyendra

-> String.split()およびPattern.split()は、後者を実行するための簡単な構文を提供しますが、基本的にはそれだけです。結果の文字列を解析したい場合、または特定のトークンに応じて区切り文字を途中で変更したい場合、それらはあなたを助けません。

-> StringTokenizerString.split()よりもさらに制限的であり、使用するのが少し面倒です。基本的に、固定部分文字列で区切られたトークンを引き出すために設計されています。この制限のため、String.split()の約2倍の速度です。 (私の String.split()StringTokenizerの比較 を参照してください。)また、正規表現APIの前にあり、そのString.split()は一部です。

String.split()は、通常のマシンでは数ミリ秒で数千の文字列をトークン化できます。さらに、StringTokenizerに比べて、出力を文字列配列として提供するという利点があります。これは通常、必要なものです。 Enumerationで提供されるStringTokenizerを使用することは、ほとんどの場合「構文的に面倒」です。この観点から、StringTokenizerは最近ではスペースの無駄遣いであり、String.split()を使用することもできます。

このリンクからの回答

19
Shoaib Chikate

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]);
17
MadProgrammer

String#splitは、StringTokenizerが文字列を分割するStringを受け入れるかどうかにかかわらず、正規表現を受け入れます。常にString#split、StringTokenizerよりも堅牢です。

1
Petr Mensik

読み取り this

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

1
Ankit Rustagi

私は次のプログラムを持っています

文字列「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
1
user2114253

http://docs.Oracle.com/javase/6/docs/api/Java/util/StringTokenizer.html say:

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

だから私は、それを変更せずに、リファクタリングを推奨した人にその行を示すと言うでしょう。たぶん、彼らは古い情報か、あなたに伝えるもう一つの正当な理由を持っています。

0
koljaTM

(私の観点から)質問に回答するリンクを次に示します。 http://lavnish.blogspot.com/2008/05/stringsplit-vs-stringtokenizer.html

0
Kaem Jii