Próbuję użyć i zrozumieć metodę Java Scanner#findWithinHorizon
.Opis metody findWithinHorizon skanera
Napisałem następujący fragment kodu, który używa tej metody, ale nie jestem w stanie zrozumieć, jak to działa.
private static void findWithinHorizon() {
String string = "Balkrishan Nagpal --> 1111, 2222, 3333";
Pattern pattern = Pattern.compile("[0-9]+");
Scanner scanner = new Scanner(string);
while (scanner.hasNext()) {
System.out.println("scanner.findWithinHorizon(pattern) = " + scanner.findWithinHorizon(pattern, 26));
}
}
Kiedy uruchomić powyższą metodę, otrzymuję następujący wynik
scanner.findWithinHorizon(pattern) = 1111
scanner.findWithinHorizon(pattern) = 2222
scanner.findWithinHorizon(pattern) = 3333
ale spodziewałbym wyjściowe zawierają tylko
scanner.findWithinHorizon(pattern) = 1111
jakom pod warunkiem że wartość horyzont jak 26
Mam świadomość, że znalezienie zgodnego skanera wyniku nie wykracza poza indeks 26 w ciągu.
Czy ktoś może wyjaśnić, jak to działa?
, czy to znaczy, że po znalezieniu liczb nadal szuka 26 znaków i przestaje szukać wzorca? –
@ShreyasSarvothama Skaner zatrzymuje wyszukiwanie natychmiast, w miejscu zaraz po znalezieniu dopasowania. Ale twój kod jest w pętli 'while', więc jest wykonywany wielokrotnie i przesuwa się za każdym razem. 'scanner.hasNext()' zwraca true, o ile jest więcej danych do odczytania. Ponieważ skaner zatrzymuje się po dopasowaniu, a nie na końcu łańcucha, jest jeszcze więcej danych do odczytania po znalezieniu '1111'. – nbrooks
@ ThomasKläger dzięki za szczegółowe wyjaśnienie. jeśli zobaczysz kod i uruchom go ... to wydrukuje 3333 dla trzeciej pętli. Więc kiedy powiesz w drugiej pętli, że skanuje od 26 do 52, powinien wydrukować zarówno 2222, jak i 3333, czyż nie? Czuję, że ... skoro skaner jest oddzielony spacją, dopóki warunek nie jest fałszywy, to wciąż znajduje wzór? –