2017-03-10 1 views
0

Ich versuche Token aus einer Datei zu lesen, die wie folgtScanner Trennzeichen erhalten Token durch „“ und „ n“ java

4 2 
3 1 2 3 

sieht Deshalb möchte ich diese Token durch abgegrenzt werden „getrennt“ oder durch Eingabe (\ n). Wie erreiche ich das?

Ich habe etwas versucht, aber ohne Erfolg.

in = new FileInputStream("input.txt"); 
     scan = new Scanner(in); 

     scan.useDelimiter(" \\n"); 

     System.out.println("I get here"); 

     t = new Translator(Integer.parseInt(scan.next()), Integer.parseInt(scan.next())); 

     System.out.println("I don't get here"); 

     int temp = Integer.parseInt(scan.next()); 
     while(temp > 0){ 
      m.final_states.add(Integer.parseInt(scan.next())); 
      temp--; 
     } 

Ich kann nicht scheinen, relevante Informationen über die Art der Trennzeichen zu finden, die ich will. Ich habe ein paar Beispiele gesehen, ich habe auch das Beispiel in der Dokumentation gelesen, aber ich bin verwirrt.

Der Fehler, den ich bekommen ist java.lang.NumberFormatException

+3

Was ist der Standardtrennzeichen eines Scanners, nach dem Javadoc? Wie definiert das Javadoc das Standardtrennzeichen? –

+1

Ihr Muster entspricht einem Leerzeichen gefolgt von einem Zeilenumbruch, nicht einem Leerzeichen oder einem Zeilenumbruch. – Bubletan

+0

@ JBNizet es ist in der Tat das Leerzeichen .. oops. Ich dachte, es würde nicht funktionieren, aber ich sehe es tut –

Antwort

1

Die gute Sache über Scanner ist, dass es vom Urtyp w/o explizite Umwandlung lesen können. Sie können den folgenden Ansatz versuchen:

try (FileInputStream source = new FileInputStream(PATH)) { 
    Scanner scanner = new Scanner(source); 
    Translator translator = new Translator(scanner.nextInt(), scanner.nextInt()); 
    while(scanner.hasNextInt()){ 
     m.final_states.add(scanner.nextInt()); 
    }  
} 

Bitte beachten Sie, dass mit Hilfe des scanner.hasNextInt() Sie nicht benötigen # Ihre Eingaben in der zweiten Zeile zu zählen.

1

Ein sehr häufiges Problem ist, dass Sie vergessen, die Zeichenfolge zu trimmen. Versuchen Sie folgendes:

m.final_states.add(Integer.parseInt(scan.next().trim())); 

und

t = new Translator(Integer.parseInt(scan.next().trim()), Integer.parseInt(scan.next().trim())); 
+0

es kann auch sein, aber es funktioniert immer noch nicht :(Danke für Ihre Antwort –

+1

es hat funktioniert! Es ist in Ordnung: D Ich musste keine benutzerdefinierten Begrenzer überhaupt. Auch, es funktioniert nicht ohne trimmen, also danke nochmal –