2017-10-31 3 views
0

Ich möchte ,\\s abgrenzen, aber ich möchte auch \n abgrenzen, was ich bisher dachte war ,\\s||\n, aber das hat nicht funktioniert, hat jemand eine Idee? Es ist natürlich als Trennzeichen gearbeitet, aber es gab IPHONE , 7.0, 4, ., 7, A, false, 0 zurück, während ich IPHONE 7, 4.7, A10, GSM, JET BLACK, 32GB, TRUE, 700Wie man mehr als 2 Trennzeichen verwendet

Die Datei I Scan zurück wollen bin, ist dies:

IPHONE 7, 4.7, A10, GSM, JET BLACK, 32GB, TRUE, 700 
IPAD AIR 2, 9.7, A8, TRUE, SILVER, 64GB, 400 

Der Code, den ich es scannen bin mit, das ist :

public static iPhone read(Scanner sc) { 
     boolean touchtech = false; 
     //int price = 12; 
     sc.next(); 
     sc.useDelimiter(",\\s||\n"); 
     String model = sc.next(); 
     double screensize = sc.nextDouble(); 
     String processor = sc.next(); 
     String modem = sc.next(); 
     String color = sc.next(); 
     String memory = sc.next(); 
     String touchtechtest = sc.next(); 
     if(touchtechtest.equals("TRUE")) { 
      touchtech = true; 
     } 
     int price = sc.nextInt(); 
     sc.close(); 
     iPhone res = new iPhone(model, screensize, processor, modem, color, memory, touchtech, price); 
     return res; 
    } 
+1

Sie müssen einen zusätzlichen Kontext bereitstellen. –

+0

Sie könnten nur eine ganze Zeile vom Scanner lesen und dann 'String.split()' verwenden, um sie in Teile zu teilen. – Jason

Antwort

0

Manchmal String.class selbst mehr als genug, um Ihre Bedürfnisse zu behandeln. Warum teilst du die Linie nicht mit Regex und arbeitest am Ergebnis? z.B.

public static iPhone read(Scanner sc) { // Better yet just make it received a String 
    final String line = sc.nextLine(); 
    final String [] result = line.split("(,)\\s*"); 

    // count if the number of inputs are correct 
    if (result.length == 8) { 
     boolean touchtech = false; 
     final String model = result[0]; 
     final double screensize = Double.parseDouble(result[1]); 
     final String processor = result[2]; 
     final String modem = result[3]; 
     final String color = result[4]; 
     final String memory = result[5]; 
     final String touchtechtest = result[6]; 
     if(touchtechtest.equals("TRUE")) { 
      touchtech = true; 
     } 
     final int price = Integer.parseInt(result[7]); 
     return new iPhone(model, screensize, processor, modem, color, memory, touchtech, price); 
    } 
    return new iPhone();// empty iphone 
} 
0

useDelimiter empfängt eine Regex. In Ihrem Fall wäre die korrekte Zeichenfolge also "(,\\s|\n)". Ihre ODER-Bedingungen werden in runde Klammern gesetzt und durch ein einzelnes Rohr, nicht durch ein Doppelrohr getrennt.

Sie können auch auf diese ausgezeichnete Antwort verweisen: How do I use a delimiter in Java Scanner?

+0

Ich habe es gerade versucht, es hat nicht funktioniert. Es gibt eine InputMismatchException für Zeile 28, die in diesem Fall die Zeile ist int price = sc.nextInt(); –

+0

Vielleicht hat Zeile 28 nicht das richtige Format? – dave

+0

Es muss das richtige Format sein. Wenn ich es in einen String ändere, funktioniert es und gibt 700 zurück, was ein int ist? –

Verwandte Themen