2010-11-20 4 views
1

J'ai le code suivant pour analyser de manière interactive pour System.in flèche: pressions sur les touchesfindWithinHorizon continue la lecture alors qu'il tombe en panne

Scanner sc = new Scanner(System.in); 
String str; 
if ((str = sc.findWithinHorizon("\\G\\033\\[C", 0)) != null) 
    System.out.println("RIGHT ARROW"); 
else if ((str = sc.findWithinHorizon("\\G\\033\\[D", 0)) != null) 
    System.out.println("LEFT ARROW"); 

quand je presse d'abord la droite du tout va bien, mais quand je presse la première gauche, findWithinHorizon se bloque en attente de plus d'entrée alors qu'il devrait échouer et retourner null.

Avec ce comportement, je ne vois pas comment utiliser cette technique pour programmer un analyseur de correspondance de modèle général.

Des indices?

grâce, Francesc

+0

Je considérerais une approche différente, peut-être quelque chose conçu pour travailler avec une clé à la fois (et prendre soin de la mise en mémoire tampon, ou le manque de, ou autre) - c'est * accepter les données * et * agir sur lui. Ceci est assez similaire à un blocage de serrure A B/B A. –

Répondre

0

findWithinHorizon attend jusqu'à ce qu'il trouve quelque chose. Vous pouvez essayer le modèle

\\G\\033\\[C|\\G\\033\\[D 

puis de consulter le contenu des chaînes.

+0

Le problème est qu'il n'est pas à l'échelle. Peut-être une meilleure solution est: \\ G \\ 033 \\\ [C | \\ G au lieu de \\ G \ 033 \\\ [C patronnage toujours correspondre, puis de comparer les longueurs. D'autres alternatives? – francesc

0

Le problème est qu'il n'est pas à l'échelle. Peut-être une meilleure solution est:

\\G\\033\\[C|\\G 

au lieu de

\\G\033\\[C 

patronnage toujours correspondre et comparer les longueurs.

Autres alternatives?

Questions connexes