2013-04-17 6 views
7

Warum funktioniert der erste Block, aber der zweite Block nicht?Java Scanner vs Matcher - Reguläre Ausdrücke, Matcher funktioniert, Scanner nicht

int numberOfDigits = 2; 
Pattern p = Pattern.compile("[01]{"+numberOfDigits+"}"); 
Matcher m = p.matcher("101100101011010011111000"); 
while(m.find()){ 
    System.out.println(m.group()); 
} 

Block 2

Scanner scannerSegment = new Scanner("101100101011010011111000"); 
    while(scannerSegment.hasNext(p)){ 
    String segment = scannerSegment.next(p); 
     System.out.println(segment); 

    } 

Antwort

3

Scanner ist nicht das entsprechende Dienstprogramm Mustern abzurufen seine hasNext(Pattern pattern) Methode. Es wird überprüft, ob das nächste vollständige Token das angeforderte Muster hat.

Java API ist das beste Dokument.

Einige Auszüge:

hasNext() : Returns true if the next complete token matches the specified 
pattern. A complete token is prefixed and postfixed by input that matches 
the delimiter pattern.` 

also durch den Raum, wenn Sie die Eingabe ändern begrenzt werden oder andere Trennzeichen (andere Trennzeichen nach Definition des Scanner Objekt gesetzt werden müssen), wird es funktionieren. So sollte diese Arbeit (für das aktuelle Muster):

Scanner scannerSegment = new Scanner("10 11 00 10 10 11 01 00 11 11 10 00"); 

Auch dies funktionieren wird (für das aktuelle Muster):

Scanner scannerSegment = new Scanner("10,11,00,10,10,11,01,00,11,11,10,00"); 
scannerSegment.useDelimiter(","); 

EDIT: Scanner bricht seine Eingabe in Token ein Trennzeichen-Muster verwenden, die Standardmäßig entspricht Whitespace.

+0

Danke, haben Sie Unterlagen zu unterstützen? – Achow

+0

Sind Sie sicher, dass im Fall der Erstellung eines 'Scanner'-Objekts mit dem Konstruktor' Scanner (String-Quelle) 'dieser Scanner mit der Quellzeichenfolge wie mit einem vollständigen Token arbeitet? Ich habe nichts gefunden, was meine Vermutung bestätigen könnte. – bsiamionau

+0

Könnten Sie die vollständige Demoversion veröffentlichen? Es funktioniert immer noch nicht für mich. – bsiamionau