2017-03-14 5 views
0

In einem Projekt, das ich gerade arbeite, muss ich Escape-Sequenzen mit der Scanner-Klasse analysieren (mit Java in Linux). So schließen zum Beispiel die beiden END Tasten auf der Tastatur, schrieb ich zunächst den folgenden Code:Parsing mit Scanner findWithinHorizon Ausgabe

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 

Mit diesem Code, bekomme ich keine Ausgabe (das Terminal nur friert). Nachdem ich das gesehen habe, habe ich die beiden Bedingungen in zwei verschiedene ifs getrennt:

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

Dann funktioniert es. Weiß jemand, warum es nicht mit dem OR-Operator funktioniert?

Vielen Dank im Voraus.

Antwort

0

Sie möchten erfassen, was inhorizon in einem String analysiert, dann führen Sie Ihre Vergleiche. Was Sie in der ersten if-Anweisung tun, ist sc zweimal zu analysieren. Wenn Sie erst einmal einen Vergleich für etwas gemacht haben, dann haben Sie das zweite Mal einen anderen Vergleich an einem anderen Teil des Textes.

Ich bezweifle, dass dies das Verhalten ist, das Sie wollten. Wenn Sie horizon auf 0 setzen, wird die aktuelle Position betrachtet und dann die Position um eins erhöht. Ihr zweiter Aufruf sieht also einen anderen Index an. Wenn Sie wirklich das Ende der Datei erreicht haben, würde ich glauben, dass dies ein merkwürdiges Verhalten verursachen und erklären würde, warum es hängt.