Neues findAll(...) in Scanner
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: essen und trinken!";
while ( sc.findInLine( "(.+?)" ) != 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( "essen und\n trinken" )
.findAll( "(.+?)" )
.forEach( matchresult -> System.out.println( matchresult.group( 1 ) ) );
Die Ausgabe ist ebenfalls „essen“ und „trinken“.