2010-08-16 6 views
2

Je rencontre un problème lors de l'utilisation de useDelimiter de la classe Scanner.Scanner, useDelimiter

Scanner sc = new Scanner(System.in).useDelimiter("-"); 
while(sc.hasNext()) 
{ 
    System.out.println(sc.next()); 
} 

si j'ai cette entrée

A-B-C

la sortie sera

A B

et attendre Je tape dans un autre "-" pour qu'il imprime le dernier caractère

Cependant si je au lieu d'avoir des données d'entrée de l'utilisateur, et insérer une chaîne au scanner à la place le code fonctionnera. Quelle est la raison et comment puis-je résoudre ce problème? Je ne veux pas utiliser StringTokenzier

Répondre

5

Si le Scanner n'attendait pas que vous entriez un autre - alors il supposerait à tort que vous avez fini de taper l'entrée. Ce que je veux dire, c'est que le Scanner doit attendre que vous ayez entré un - car il n'a aucun moyen de connaître la longueur de l'entrée suivante. Donc, si un utilisateur voulait taper A-B-CDE et que vous vous arrêtiez pour prendre une gorgée de café au C, il n'aurait pas la bonne entrée. (Vous attendez [ A, B, CDE ] mais il obtiendriez [ A, B, C ])

Lorsque vous passez dans un String plein, Scanner sait où la fin de l'entrée est, et n'a pas besoin d'attendre une autre delimiter.

Comment je le ferais suit:

Scanner stdin = new Scanner(System.in); 
String input = stdin.nextLine(); 
String[] splitInput = input.split("-", -1); 

Vous avez maintenant un tableau de Strings qui contiennent les données entre tous les - s.

Here is a link to the String.split() documentation for your reading pleasure.

+0

donc il n'y a aucun moyen de contourner cela, mais d'utiliser un scanner qui prend l'entrée complète, et un autre scanner qui analyse l'entrée? – starcorn

+0

@klw, je vais vous montrer comment je le ferais dans un montage. – jjnguy

+0

@klw, vous avez seulement besoin d'un 'Scanner'. – jjnguy

3

Vous pouvez utiliser un délimiteur alternatif useDelimiter("-|\n"); Il fonctionne avec un argument de chaîne, ainsi que par la lecture de System.in. Dans System.in, vous devez appuyer sur Entrée à la fin de la ligne.

0

Comment je le ferais suit:

Scanner stdin = new Scanner(System.in); 
String s = stdin.nextLine(); 
String[] splitInput = s.split("-", -1); 

Vous avez maintenant un tableau de Strings qui contiennent les données entre tous les - s.