Immer dann, wenn ein Scanner mit einem regulären Ausdruck konfiguriert wurde, wird intern der Zustand vom dafür zugewiesenen Matcher aktualisiert. Die Scanner-Methode match() liefert einen MatchResult der letzten Operation, allerdings folgt eine IllegalStateException, wenn es keinen Match gab oder der letzte Match nicht erfolgreich war.
Beispiel: Finde alles, was im inneren zwischen <b></b> steht:
Scanner sc = new Scanner( "Wichtig: <b>essen</b> und <b>trinken</b>!"; while ( sc.findInLine( "<b>(.+?)</b>" ) != null ) System.out.println( scanner.match().group( 1 ) );
Die Ausgabe ist dann „essen“ und „trinken“.
Java 9 bringt die neue Methode Stream<MatchResult> findAll(Pattern pattern)/ findAll(String patString) mit.
Beispiel: Finde alles, was im inneren zwischen <b></b> steht:
new Scanner( "<b>essen</b> und\n <b>trinken</b>" ) .findAll( "<b>(.+?)</b>" ) .forEach( matchresult -> System.out.println( matchresult.group( 1 ) ) );
Die Ausgabe ist ebenfalls „essen“ und „trinken“.