2016-10-27 13 views
6

Według the javadoc for java.util.Scanner.skip ta metoda:Scanner.skip dokumentację dotyczącą ograniczniki

wejście

Przejście który pasuje do określonego wzorca, ignorowanie ograniczniki.

Ale jestem mylić, co wyrażenie „ignorując delimeters” oznaczają, ponieważ następujący kod zgłasza wyjątek przy użyciu Java 7 w Eclipse:

import java.util.Scanner; 

public class Example 
{ 

    public static void main(String [] args) 
    { 
     Scanner sc = new Scanner("Hello World! Here 55"); 
     String piece = sc.next(); 

     sc.skip("World"); // Line A throws NoSuchElementException, vs. 
     sc.skip("\\sWorld"); // Line B works! 
     sc.findInLine("World"); // Line C works! 
    } 
} 

nie wydaje się ignorować separatory gdy przeskoki, jak pokazuje linia A. Jednak linia C wydaje się działać, chociaż jej dokumentacja używa tego samego wyrażenia "ignorowanie ograniczników". Czy w tym przypadku nie mam pewności co do ich koncepcji "ignorowania ograniczników" lub czy jest to faktyczny błąd? czego mi brakuje?

Odpowiedz

2

można pominąć następne zdanie opisu danej metody, które odczytuje (Kopalnia nacisk):

Ta metoda pomijania wejście jeśli zakotwiczone mecz określonego wzorca powiedzie.

Więc Scanner jest nie tyle „ignorowanie” separator, ale po prostu stara się dopasować podanego wyrażenia regularnego, nie biorąc pod uwagę ogranicznik. Innymi słowy, przestrzeń przed World nie jest traktowana jako ogranicznik przez skip(), ale jedynie część danych wejściowych, z którymi próbuje się dopasować.

+0

Rozumiem twoje wyjaśnienie. Być może powinni wyjąć wyrażenie "ignorowanie ograniczników" i powiązać z pojęciem "zakotwiczenia" Matchera, ponieważ byłem niejasno świadom tego pojęcia. Zakładałem, że "kotwica" wskazywałaby na następny symbol z powodu tego mylącego zwrotu. Zgodziłbyś się? –

+0

Zakotwiczenie to kolejna postać, którą odczyta "Skaner". W tym kontekście 'Scanner.skip()' jest semantycznie bliższy 'Matcher.matches()' niż 'Matcher.find()'. –

Powiązane problemy