2016-10-27 9 views
6

Nach the javadoc for java.util.Scanner.skip diese Methode:Scanner.skip Dokumentation über Trennzeichen

Skips Eingang, der mit dem angegebenen Muster übereinstimmt, ignoriert delimiters.

Aber ich bin verwirrt, was das Wort bedeutet ‚Trennzeichen ignorieren‘, da der folgende Code eine Ausnahme mit Hilfe von Java 7 in Eclipse wirft:

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! 
    } 
} 

Es scheint nicht, Trennzeichen zu ignorieren, wenn das Überspringen, Wie Zeile A zeigt. Zeile C scheint jedoch zu funktionieren, obwohl in ihrer Dokumentation die gleiche "ignoring delimiters" -Phrase verwendet wird. Ist mir in diesem Fall unklar, wie man "Begrenzer ignorieren" versteht, oder ist das ein echter Bug? Was vermisse ich?

Antwort

2

Sie verließ den nächsten Satz der Beschreibung des Verfahrens, die (Hervorhebung von mir) lautet:

Diese Methode wird Eingabe überspringen, wenn ein verankerte Spiel des angegebenen Muster erfolgreich ist.

So ist Scanner nicht so viel „zu ignorieren“ das Trennzeichen, sondern einfach versuchen, den angegebenen regulären Ausdruck übereinstimmen, ohne das Trennzeichen berücksichtigt. Mit anderen Worten, das Leerzeichen vor World wird nicht als Trennzeichen von skip() behandelt, sondern nur als Teil der Eingabe, mit der es übereinstimmt.

+0

Ich verstehe Ihre Erklärung. Vielleicht sollten sie den Ausdruck "ignoring delimiters" herausnehmen und auf Matcher's Konzept des "verankerns" verweisen, da ich mir dieses Konzept nur vage bewusst war. Ich nahm an, dass der "Anker" wegen dieser irreführenden Phrase auf das nächste Token zeigen würde. Würdest du zustimmen? –

+0

Der Anker ist das nächste Zeichen, das der 'Scanner' liest. In diesem Zusammenhang ist "Scanner.skip()" semantisch näher an "Matcher.matches()" als an "Matcher.find()". –

Verwandte Themen