Разбор со сканером findWithinHorizon проблема

В проекте, в котором я сейчас работаю, мне нужно проанализировать escape-последовательности с помощью класса Scanner (используя Java в Linux). Чтобы включить, например, две клавиши END на клавиатуре, я изначально написал следующий код:

if(sc.findWithinHorizon("(\\G\\e\\[4~)?",0).length() > 0 || sc.findWithinHorizon("(\\G\\eOF)?",0).length() > 0 ) {
  System.out.print("END"); //To see if it works

С этим кодом я не получаю никакого вывода (терминал просто зависает). Увидев это, я разделил два условия на два разных if:

 if(sc.findWithinHorizon("(\\G\\e\\[4~)?",0).length() > 0) 
   System.out.print("END"); 
 else if(sc.findWithinHorizon("(\\G\\eOF)?",0).length() > 0 )
   System.out.print("END");

Тогда это работает. Кто-нибудь знает, почему он не работает с оператором ИЛИ?

Заранее спасибо.

1 ответ

Вы захотите захватить то, что findwithinhorizon анализирует в String, а затем сделать ваши сравнения. Что вы делаете в первом случае, если оператор дважды разбирает sc? Однажды проводя сравнение для чего-то, затем второй раз сделай другое сравнение для другой части текста.

Я сомневаюсь, что это поведение, которое вы хотели. когда вы устанавливаете горизонт в 0, он будет смотреть на текущую позицию, затем увеличивать позицию на единицу, поэтому ваш второй вызов смотрит на другой индекс. Если бы вы действительно достигли конца файла, я бы поверил, что это вызовет какое-то странное поведение и объяснит, почему он зависает.

Другие вопросы по тегам