2016-06-18 10 views
-1

Ich versuche, verdoppelt sich von Datei zu lesen:Scanner und Muster verwenden

14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065,1 
13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050,1 
(...) 

Mit dieser Methode:

List<Double> values = new ArrayList<>(); 
(...) 
value = Double.parseDouble(scanner.next(Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)"))); 
(...) 
values.add(value); 

Aber das funktioniert nicht! Ich habe InputMismatchException, aber ohne Nachricht, so dass ich komplett nicht weiß, was vor sich geht. Ist das Muster falsch oder so?

+0

Gibt es Gründe, die Sie nicht [ 'nextdouble()'] (https : //docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#nextDouble--)? – Tunaki

+0

Ich habe versucht, aber ich hatte auch InputMismatchException. – user6111204

+0

benutze besser 'Arrays.asList (scanner.nextLine.split (", ")). Stream(). Map (Double :: parseDouble) .forEach (System.out :: println/* oder mache etwas anderes hier * /) ; ' – LowLevel

Antwort

0

Das Trennzeichen, das von Scanner standardmäßig verwendet wird, ist Leerzeichen, aber in Ihrer Datendatei verwenden Sie offensichtlich Komma, d. H. "," Als Trennzeichen. Und das ist der Grund.

Wenn Sie die nächste Übereinstimmung suchen und das Trennzeichen ignorieren möchten, verwenden Sie scanner.findWithinHorizon(Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)"), 0); . Wenn Ihre Daten in einer Zeile bleiben, verwenden Sie findInLine(pattern).

Oder Sie können auch Trennzeichen zuweisen, mit scanner.useDelimiter(String pattern), vielleicht in Ihrem Fall scanner.useDelimiter(",") Bitte lesen

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html