2016-04-27 10 views
-1

Ich möchte StringTokenizer Ergebnis zu ArrayList nehmen. Ich habe folgenden Code verwendet und in der ersten Druckanweisung stok.nextToken() die korrekten Werte ausgedruckt. Aber geben Sie in der zweiten Druckanweisung für ArrayList Fehler als java.util.NoSuchElementException. Wie nehme ich diese Ergebnisse zu einer ArrayList?Wie nehme ich das StringTokenizer-Ergebnis zu ArrayList in Java?

import java.io.BufferedReader; 
    import java.io.InputStreamReader; 
    import java.util.ArrayList; 
    import java.util.StringTokenizer; 

     public class Test { 
     public static void main(String[] args) throws java.io.IOException { 

      ArrayList<String> myArray = new ArrayList<String>(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
      System.out.print("Enter : "); 
      String s = br.readLine(); 
      StringTokenizer stok = new StringTokenizer(s, "><"); 
      while (stok.hasMoreTokens()) 
       System.out.println(stok.nextToken()); 
      // -------until now ok 

      myArray.add(stok.nextToken()); //------------??????????? 
      System.out.println(myArray); 

     } 
    } 
+1

Schauen Sie sich Ihre 'while' Aussage an. Wenn die Ausführung die Schleife verlässt, was bedeutet das für "stok"? – Savior

+0

Vielen Dank für Ihre Antwort. Also, wie werde ich dieses Ergebnis zu einer ArrayList bringen? – Emalka

+1

'stok' wurde vollständig von der while-Schleife gelesen, daher ruft '' nextToken() 'nach Abschluss der Schleife natürlich einen (end-of-data) -Fehler auf. Haben Sie vor, den 'add()' Aufruf innerhalb der Schleife zu haben? Wenn dem so ist, vermissen Sie einige {geschweifte Klammern}. Ansonsten, * was * versuchst du zu tun? Frage bearbeiten und erklären. – Andreas

Antwort

-1
ArrayList<String> myArray = new ArrayList<String>();   
while (stok.hasMoreTokens()){ 
myArray.add(stok.nextToken()); 
} 

tun sie nicht stock.nextToken außerhalb der while-Schleife aufrufen, die in Ausnahmefällen führt und Arraylist in System.out.println pflegen Sie für Schleife ein helfen Ausdrucken verwenden.

for(String s : myArray){ 
System.out.Println(s); 
} 
+0

Vielen Dank für Ihre Antwort. – Emalka

+0

Sie sind herzlich willkommen! – Priyamal

+0

Ich weiß nicht, wohin mein Kommentar gegangen ist, aber das Drucken einer ArrayList ** wird ** nicht den Speicherort angeben. Es wird alle Elemente der Liste drucken. Selbst wenn dies nicht der Fall wäre, würde es keinen Speicherort drucken, da Ausgabe wie "List @ 5ad6521c" ein ** Hash-Code ** ist, kein Speicherort! – Andreas

3

Zitiert javadoc von StringTokenizer:

StringTokenizer ist ein Vermächtnis-Klasse, die aus Gründen der Kompatibilität obwohl seine Verwendung abgeraten in neuen Code beibehalten wird. Es wird empfohlen, dass jeder, der diese Funktionalität sucht, die split-Methode von String oder das java.util.regex-Paket stattdessen verwendet.

"Neuer Code" bedeutet alles, was für Java 1.4 oder später, d.


Die while Schleifen werden alle Werte aus den tokenizer extrahieren. Wenn Sie dann nextToken()nach aufrufen bereits alle Token extrahiert haben, warum sind Sie überrascht, dass Sie eine Ausnahme erhalten?

Werfen NoSuchElementException wenn es keine weiteren Token in diesem tokenizer Streichquartette sind:

Gerade dieses Zitat aus dem javadoc von nextToken() gegeben.

Wolltest du das vielleicht?

ArrayList<String> myArray = new ArrayList<>(); 
StringTokenizer stok = new StringTokenizer(s, "><"); 
while (stok.hasMoreTokens()) { 
    String token = stok.nextToken(); // get and save in variable so it can be used more than once 
    System.out.println(token); // print already extracted value 
    // more code here if needed 
    myArray.add(token); // use already extracted value 
} 
System.out.println(myArray); // prints list 
+0

Vielen Dank für Ihre Antwort. Ich habe {Klammern} von während verpasst. – Emalka

+1

Sie haben nicht nur die Zahnspange vermisst. Der 'add()' Aufruf wurde nicht eingerückt, so dass Sie nicht einmal die * Absicht * des Codes angezeigt haben. Einrücken ist sehr wichtig für menschliche Leser Ihres Codes.Da der Code in der Frage geschrieben wird, war nicht klar, was Sie überhaupt mit dem Code machen wollten. Fehlende Zahnspangen waren das geringste Problem. – Andreas