2010-11-20 9 views
1

scheitern Ich habe den folgenden Code, um interaktiv System.in für Drücken der Tasten Pfeil analysieren:findWithinHorizon hält lesen, während es sollte

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"); 

wenn ich drücke zuerst die rechte Pfeil alles gut geht, aber wenn ich zum ersten Mal die Taste left one, findWithinHorizon hängt, wartet auf weitere Eingaben, während es fehlschlagen und null zurückgeben sollte.

Mit diesem Verhalten sehe ich nicht, wie diese Technik verwendet wird, um einen allgemeinen Parser für die Mustererkennung zu programmieren.

Irgendwelche Hinweise?

Dank, Francesc

+0

Ich würde einen anderen Ansatz betrachten, vielleicht etwas entwickelt, um mit einem Schlüssel zu einer Zeit zu arbeiten (und kümmern sich um Pufferung, oder das Fehlen von oder was nicht) - das ist * akzeptieren Sie die Daten * und * dann * handle darauf. Dies ist ziemlich ähnlich wie bei einem A B/B A Lock Deadlock. –

Antwort

0

findWithinHorizon wartet, bis er etwas findet. Sie könnten versuchen, das Muster

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

und dann den Inhalt der Zeichenfolgen zu versuchen.

+0

Problem ist, dass es nicht skaliert. Vielleicht eine bessere Lösung ist: \\ G \\ 033 \\\ [C | \\ G statt \\ G \ 033 \\\ [C Herstellungsmuster immer passen und dann Längen vergleichen. Andere Alternativen? – francesc

0

Problem ist, dass es nicht skaliert. Vielleicht eine bessere Lösung ist:

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

statt

\\G\033\\[C 

machen Muster immer passen und dann Längen vergleichen.

Andere Alternativen?

Verwandte Themen