findWithinHorizon продолжает читать, пока не получится - PullRequest
1 голос
/ 21 ноября 2010

У меня есть следующий код для интерактивного анализа System.in для нажатия клавиш со стрелками:

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

, когда я нажимаю первую стрелку вправо, все идет хорошо, но когда я нажимаю первую левую стрелку, findWithinHorizon зависаетожидание большего ввода, в то время как он должен потерпеть неудачу и вернуть ноль.

При таком поведении я не вижу, как использовать эту технику для программирования общего синтаксического анализатора сопоставления с образцом.

Любые подсказки?

спасибо, Франческ

Ответы [ 2 ]

0 голосов
/ 21 ноября 2010

Проблема в том, что она не масштабируется.Возможно, лучшим решением будет:

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

вместо

\\G\033\\[C

, чтобы шаблон всегда совпадал, а затем сравнивал длины.

Любые другие альтернативы?

0 голосов
/ 21 ноября 2010

findWithinHorizon ждет, пока что-нибудь найдет. Вы можете попробовать шаблон

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

, а затем посмотрите на содержимое строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...