Hi Leute,
ich kämpfe gerade mit regulären Ausdrücken und den beiden Klassen Scanner und Matcher. Folgendes sehr einfaches Beispiel:
Mein String sieht so aus:
test temp
Mein Pattern ist:
temp
Folgender Code verwirrt mich:
Wenn ich mein Pattern über die Scanner-Klasse verwende, bekomme ich als Ausgabe "doch nicht", sprich er hat nichts gefunden. Wenn ich den Matcher direkt anspreche, bekomme ich "irgendwas wurde gefunden" und "temp" als Ausgabe, sprich das Pattern wurde gefunden. Wo ist der Unterschied? Ich würde die Scanner Klasse sehr gerne verwenden, da ich ihr auch einen InputStream als Basis übergeben kann, was beim Matcher nicht der Fall ist, ich aber benötige, da die Datenmengen, die ich mit der regex durchsuchen möchte, durchaus größer werden können. Hat irgendwer eine Idee, warum der Scanner das Pattern nicht findet? Soweit ich das im Source von sun sehen konnte, verwenden die doch intern auch den Matcher, oder habe ich das falsch gelesen? Ich bin ein wenig verwirrt...
Danke für eure Hilfe und sonnige Grüße aus dem schönen Flensburg,
Andreas
ich kämpfe gerade mit regulären Ausdrücken und den beiden Klassen Scanner und Matcher. Folgendes sehr einfaches Beispiel:
Mein String sieht so aus:
test temp
Mein Pattern ist:
temp
Folgender Code verwirrt mich:
Code:
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner("test temp");
Pattern pattern = Pattern.compile("temp");
if (scanner.hasNext(pattern)) {
System.out.println("gefunden");
MatchResult matchResult2 = scanner.match();
System.out.println(matchResult2.group());
} else {
System.out.println("doch nicht");
}
Matcher matcher = pattern.matcher("test temp");
if (matcher == null || !matcher.find()) {
System.out.println("nichts gefunden");
} else {
System.out.println("irgendwas wurde gefunden");
MatchResult matchResult = matcher.toMatchResult();
System.out.println(matchResult.group());
}
}
}
Danke für eure Hilfe und sonnige Grüße aus dem schönen Flensburg,
Andreas