2016-06-20 7 views
3

Warum ist dieser Druck die gesamte Zeichenfolge "1fish2fish" ...Warum wird Java das letzte Wort hier nicht drucken?

import java.util.Scanner; 
class Main { 
    public static void main(String[] args) { 
    String input = "1,fish,2,fish"; 
    Scanner sc = new Scanner(input); 
    sc.useDelimiter(","); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    } 
} 

aber nur, druckt "1fish2" obwohl ich "1, Fisch, 2, Fisch" geben?

import java.util.Scanner; 
class Main { 
    public static void main(String[] args) { 
    System.out.println("Enter your string: "); 
    Scanner sc = new Scanner(System.in); 
    sc.useDelimiter(","); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    } 
} 
+0

http://ideone.com/3nVHEP –

Antwort

4

Im ersten Fall benötigt der Scanner nicht das letzte Trennzeichen, da es weiß, dass keine Zeichen mehr vorhanden sind. Es weiß also, dass das letzte Token "Fisch" ist und es keine weiteren Zeichen mehr zu verarbeiten gibt.

Bei einem System.in-Scan gilt das vierte Token nur dann als abgeschlossen, wenn das vierte ',' in den Systemeingang eingegeben wird.

Beachten Sie, dass Leerzeichen standardmäßig als Trennzeichen gelten. Wenn Sie jedoch mit useDelimiter ein alternatives Trennzeichen angeben, zeichen sich Leerzeichen nicht mehr ab.

In der Tat, Ihr erster Versuch kann geändert werden, um zu beweisen, dass Leerzeichen ist nicht delimiters mehr ...

public static void main(String[] args) { 
    String input = "1,fish,2,fish\n\n\n"; 
    Scanner sc = new Scanner(input); 
    sc.useDelimiter(","); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 
    System.out.print(sc.nextInt()); 
    System.out.println(sc.next()); 

    System.out.println("Done"); 
    sc.close(); 

    } 

Die neue Linie Zeichen werden als Teil des vierten Token behandelt werden.

0

Scanner wartet darauf, dass Sie ein anderes ',' eingeben, wenn Sie ',' eingeben, danach wird sofort Fisch nach 1fish2 gedruckt.

so Pass 1,fish,2,fish, statt 1,fish,2,fish

1

ich den ersten Schnipsel überprüft; es ist richtig Druck -

Verbindung - http://code.geeksforgeeks.org/jK1Mlu

Bitte lassen Sie uns wissen, ob Ihre Erwartung ist anders.

+0

Ja, das erste Snippet druckte wie erwartet. Die zweite war die, mit der ich ein Problem hatte. –

Verwandte Themen