2016-04-13 10 views
2

Ich verwende einen Scanner lesen eine Zeichenfolge zu lesen, die wie folgt aussehen:Wie im Doppel und Ints aus einem String, ohne zu lesen Kommas

"1.0, 1, 3.0, 4, 2.0, 6" 

Das ist eine doppelte, gefolgt von einem int, usw., getrennt durch ein Komma.

stelle ich meinen Scanner

Scanner in = new Scanner(string); 

dann es wie folgt aufbrauchen:

newNode.coefficient = in.nextDouble(); 
newNode.exponent = in.nextInt(); 

Wenn die Zeichenfolge keine Kommas enthält, es funktioniert gut. Aber meine Zeichenfolge hat Kommas wie oben gezeigt.

Wie überspringe ich die Kommata?

Ich möchte die Zeichenfolge nicht aufteilen (die Länge der Zeichenfolge wird variieren, obwohl das Format gleich bleibt), also bitte erklären Sie mir das nicht.

+1

der [Trennzeichen] Scanner-Set (https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#delimiter--) das Komma enthalten. – AJNeufeld

Antwort

2

Stellen Sie den Begrenzer Ihrer Scanner Kommas akzeptieren:

Scanner input = new Scanner(System.in).useDelimiter(", "); 

Das Standardtrennzeichen Leerzeichen ist, aber Sie können es auf etwas anderes über useDelimiter() gesetzt.

Da auch die Begrenzer ein regulärer Ausdruck ist, können Sie den Raum nach dem Komma optional machen:

Scanner input = new Scanner(System.in).useDelimiter(", ?"); 
0

Vom Scanner Dokumentation:

Der Scanner auch andere Trennzeichen verwenden kann, als Leerzeichen. Dieses Beispiel liest den Artikel mehrfach aus einem String:

String input = "1 fish 2 fish red fish blue fish"; 
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); 
System.out.println(s.nextInt()); 
System.out.println(s.nextInt()); 
System.out.println(s.next()); 
System.out.println(s.next()); 
s.close(); 

Sie einfach den Scanner so einstellen könnte eine durch Komma Leerzeichen Kombination als Trennzeichen zu verwenden.

in.useDelimiter("\\s*,\\s*");