wake-up-neo.net

Unterschied zwischen der Verwendung von StringTokenizer und String.split ()?

Ich habe String[] split(String) der String-Klasse verwendet, um einen beliebigen String für einen bestimmten Begrenzer aufzuteilen, und es hat gut funktioniert.

Nun wird jedoch erwartet, dass die gleiche Logik mit StringTokenizer neu faktorisiert wird. Aber was sind die Unterschiede und Vorteile, wenn man eins über das andere setzt.

Ich glaube auch, dass String[], der von split() in einem einzigen Aufruf zurückgegeben wird, eine sehr viel effizientere Option ist als die Verwendung der Objekte der Klasse StringTokenizer.

13
Satyendra

-> String.split() und Pattern.split() geben Ihnen eine einfache Syntax, um Letzteres zu tun, aber das ist im Wesentlichen alles, was sie tun. Wenn Sie die resultierenden Zeichenfolgen analysieren oder das Trennzeichen je nach Token auf halbem Weg ändern möchten, helfen Ihnen diese nicht.

-> StringTokenizer ist noch restriktiver als String.split() und etwas schwerer zu benutzen. Es ist im Wesentlichen für das Herausziehen von Tokens bestimmt, die durch feste Teilstrings begrenzt sind. Aufgrund dieser Einschränkung ist es ungefähr doppelt so schnell wie String.split(). (Siehe meinen Vergleich von String.split() und StringTokenizer .) Er ist auch älter als die API für reguläre Ausdrücke, zu der String.split() gehört.

Sie werden aus meinen Timings feststellen, dass String.split()Tausende von Strings in wenigen Millisekunden auf einer typischen Maschine noch kennzeichnen kann. Darüber hinaus hat es gegenüber StringTokenizer den Vorteil, dass Sie die Ausgabe als String-Array erhalten, was normalerweise gewünscht ist. Die Verwendung einer Enumeration, wie sie von StringTokenizer bereitgestellt wird, ist meistens zu "syntaktisch umständlich". Aus dieser Sicht ist StringTokenizer heutzutage etwas Platzverschwendung, und Sie können auch einfach String.split() verwenden.

Antwort von diesem Link

18
Shoaib Chikate

Schauen Sie sich die JavaDocs an

StringTokenizer ist eine ältere Klasse, die aus Gründen der Kompatibilität beibehalten wird Gründe, obwohl die Verwendung im neuen Code nicht empfohlen wird. Es wird empfohlen dass jeder, der diese Funktionalität sucht, die Split-Methode von String .__ verwendet. oder stattdessen das Java.util.regex-Paket.

Das folgende Beispiel veranschaulicht, wie die String.split-Methode .__ sein kann. verwendet, um eine Zeichenfolge in ihre grundlegenden Token aufzuteilen:

 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 akzeptiert einen regulären Ausdruck, ob StringTokenizer nur eine String akzeptiert, mit der die Zeichenfolge geteilt wird. Sie sollten sich immer an den String#split halten, er ist robuster als StringTokenizer.

1
Petr Mensik

Lies this

StringTokenizer ist eine ältere Klasse, die aus Kompatibilitätsgründen beibehalten wird, obwohl von deren Verwendung im neuen Code abgeraten wird. Es wird empfohlen, dass jeder, der diese Funktionalität sucht, stattdessen die Split-Methode von String oder das Java.util.regex-Paket verwendet.

1
Ankit Rustagi

Ich habe folgendes Programm, 

Die Zeichenfolge "x" ist ein Tabulator 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 sagen Sie:

StringTokenizer ist eine ältere Klasse, die aus Kompatibilitätsgründen beibehalten wird, obwohl von deren Verwendung im neuen Code abgeraten wird. Es wird empfohlen, dass jeder, der diese Funktion sucht, stattdessen die Split-Methode von String oder das Java.util.regex-Paket verwendet.

Also würde ich sagen, ändern Sie es nicht und zeigen Sie diese Linie der Person, die das Refactoring empfohlen hat. Vielleicht haben sie alte Informationen oder einen anderen guten Grund, Ihnen davon zu erzählen.

0
koljaTM

Hier ist ein Link, der (aus meiner Sicht) die Frage beantwortet: http://lavnish.blogspot.com/2008/05/stringsplit-vs-stringtokenizer.html

0
Kaem Jii