Unterschied Scanner und Matcher

Status
Nicht offen für weitere Antworten.

Andreas29

Bekanntes Mitglied
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:
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());
        }

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

SlaterB

Gast
hasNext() schaut sich das nächste Token an, das ist 'test' und passt nicht zu 'temp'

find() macht ganz was anders, durchsucht einen String beliebiger Länge nach dem Pattern,
wieso sollten diese Operationen das gleiche machen?
 
B

Beni

Gast
Das "hasNext" bezieht sich nur auf den Beginn des aktuellen Streams, also in deinem Fall wird getestet ob "test temp" mit "temp" beginnt (nein, tut es nicht).

Du könntest eine Schleife machen in der du immer das erste Zeichen des Scanners liest (und somit den Start des Scanners verschiebst), und dann nocheinmal testest.

Bei grösserem Input lohnt es sich vielleicht, einen hardcodierten Lexer zu verwenden - z.B. JFlex kann dir einen solchen generieren.
 

Andreas29

Bekanntes Mitglied
Hi,

erstmal danke für die Antworten!

Ich hatte hasNext() so verstanden, dass er den kompletten String durchsucht und mir sagt, ob der String noch einmal mein Pattern beinhaltet. Aber dies scheint dann wohl die find() methode zu machen. Wieder etwas gelernt. Tja, man kann alt werden wie ein Haus und lernt doch nicht aus.

So, die Antwort war ein bisschen schnell:
Und wie bekomme ich den Scanner dazu, so zu arbeiten, wie Matcher.find()? Gibt es da keine fertigen Methoden für?

Dank euch!

Grüße,
Andreas
 
S

SlaterB

Gast
ein Scanner ist dafür da, einen String von Anfang bis Ende zu durchlaufen,
er ist kein JFrame, kein Integer und auch kein Matcher,
wieso sollte er? ;)

dass du in einer Schleife token auslassen kannst, hat Beni ja schon geschrieben
 

Andreas29

Bekanntes Mitglied
Hi,

der Scanner durchläuft den String nur nicht so, wie ich es erwartet habe. Ich dachte, er durchläuft von vorne den String und gibt mir in seiner next Methode das nächste Token zurück, welches auf meine regex zutrifft, was er aber nicht tut. Und da war mein falsches Verständnis. Ich bräuchte also einen Matcher, der nicht auf String sondern auf InputStream Basis arbeitet. Die Idee mit der for-Schleife muss ich mir nochmal durch den Kopf gehen lassen.

Ich hatte halt simpel und einfach ein anderes Verhalten erwartet.

Grüße,
Andreas
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
P Unterschied Java SE und Java EE Allgemeine Java-Themen 2
J Unterschied: Polymorphie und Dynamisches Binden Allgemeine Java-Themen 8
VfL_Freak JDK installieren Unterschied zw. JDK 8_151 und 8_152 Allgemeine Java-Themen 3
F Unterschied zwischen NormalizedValue und Value Allgemeine Java-Themen 5
T Unterschied Oracle JDK 8u111 8u112 Allgemeine Java-Themen 3
W Unterschied Standalone und Applet Allgemeine Java-Themen 1
O [log4J] Unterschied SocketServer <-> SimpleSocketServer Allgemeine Java-Themen 0
A Best Practice Unterschied zwischen einer sauberen Dependency Injection und einer statischen Klasse Allgemeine Java-Themen 5
M Unterschied zwischen Win 7/2008R2 und Win8.1/2012R2? Allgemeine Java-Themen 8
M Unterschied CPU Auslastung Allgemeine Java-Themen 0
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
N Unterschied Hobby-Codung und Professionelle Softwareentwicklung Allgemeine Java-Themen 5
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
G UnterSchied OpenJDK vs JDK Allgemeine Java-Themen 11
G Unterschied MyClass.class vs this Allgemeine Java-Themen 2
H Unterschied EventQueue.invoke... und thread.start() Allgemeine Java-Themen 4
Semox Unterschied bei Thread Erstellung Allgemeine Java-Themen 11
D Exakte Unterschied zwischen diesen Elementen? Allgemeine Java-Themen 5
N Unterschied zwischen "Java" und "Java mit Eclipse" Allgemeine Java-Themen 17
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
G Hauptthread anhalten / Unterschied zwischen Main-Thread und dialogelement-Thread Allgemeine Java-Themen 2
Lufti Unterschied zwischen Djava.library.path und Class-Path im Manifest? Allgemeine Java-Themen 2
B Unterschied zwischen Klasse und Objekt? Allgemeine Java-Themen 8
G Unterschied Enterprise Anwendung und Web Anwendung Allgemeine Java-Themen 30
B Gibt es einen Unterschied zwischen Java 1.2 und Java 2? Allgemeine Java-Themen 7
J Unterschied zwischen "Debug" und "Run" Allgemeine Java-Themen 16
Q Unterschied der Logger Allgemeine Java-Themen 9
G Unterschied Long - Int Allgemeine Java-Themen 9
M Unterschied der java.exe des JDK und der JRE Allgemeine Java-Themen 15
P Unterschied zwischen Funktion und Methoden Allgemeine Java-Themen 3
K Unterschied Compilierung Eclipse 3.2 und Ant Allgemeine Java-Themen 3
O Unterschied zwischen ThreadPoolExecutor und Executor Service Allgemeine Java-Themen 7
O Unterschied zwischen Semaphoren/Lock und ExecutorService Allgemeine Java-Themen 3
V Unterschied FileOutputStream und FileWriter? Allgemeine Java-Themen 8
I Unterschied zwischen Applet und JApplet Allgemeine Java-Themen 2
B Unterschied: jar <-> konsole Allgemeine Java-Themen 9
G Unterschied abstrakte Klasse und Interface? Allgemeine Java-Themen 3
R Der Unterschied zwischen 2.1 und 2.10 Allgemeine Java-Themen 2
T abstract - interface Unterschied Allgemeine Java-Themen 22
K Unterschied Core Java / Desktop Allgemeine Java-Themen 12
P Was ist der Unterschied zwischen JSP und Servlet ? Allgemeine Java-Themen 4
J Unterschied PrintJob & PrinterJob Allgemeine Java-Themen 11
M Unterschied notify() und notifyAll() Allgemeine Java-Themen 1
N Unterschied Calendar und GregorianCalendar Allgemeine Java-Themen 9
S Unterschied zwischen notify() und notifyAll() Allgemeine Java-Themen 2
M Unterschied zwischen // und \\ Allgemeine Java-Themen 6
E Unterschied zwischen Adapterklassen und abstracten Klassen? Allgemeine Java-Themen 5
T Unterschied Dämon - Thread (läuft später auf RMI hinaus...) Allgemeine Java-Themen 6
B Unterschied: Java - Java 2 Allgemeine Java-Themen 5
B (String) und toString(), woliegt der Unterschied? Allgemeine Java-Themen 4
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
J Variablen Scanner als Klassenvariable Allgemeine Java-Themen 5
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
Bluedaishi Twain Scanner im Netzwerk Allgemeine Java-Themen 10
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
J Scanner oder BufferReader Allgemeine Java-Themen 2
1 Java Scanner Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
T Datentypen Scanner Allgemeine Java-Themen 4
A Erste Schritte If Abfragen + Scanner Allgemeine Java-Themen 7
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
P Input/Output Datei einlesen per Scanner(f) - mit Cron gehts nicht Allgemeine Java-Themen 1
S Erste Schritte Scanner in Methode einbauen Allgemeine Java-Themen 4
B QR Scanner WebCam Allgemeine Java-Themen 2
P Scanner als Inputstream für Java Prozess Allgemeine Java-Themen 4
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
J NetBeans Frage bezüglich der Scanner-Klasse Allgemeine Java-Themen 6
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
Ark Locale, Formatter und Scanner: Bug bei Gleitkommazahlen? Allgemeine Java-Themen 2
X Scanner hört nach der 25. Zeile auf Allgemeine Java-Themen 6
A Split, Scanner, StringTokenizer oder PatternMatching für flexibles Dateieinlesen? Allgemeine Java-Themen 2
D java.util.InputMismatchException im Scanner -wieso? Allgemeine Java-Themen 5
K Scanner - große Textfile, nur 0 ab betim. Wert Allgemeine Java-Themen 4
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
N Scanner läuft nicht durch Allgemeine Java-Themen 2
R Scanner mit Java Allgemeine Java-Themen 2
J Parser / Scanner / Tokenizer gesucht Allgemeine Java-Themen 3
J Problem mit Scanner-Stream Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
M Scanner-Methode: Mehrere Eingaben mit Exception behandeln Allgemeine Java-Themen 10
R Barcode Scanner mit JavaPos ansprechen Allgemeine Java-Themen 1
M Barcode-Scanner unterscheidung zur Tastertur Allgemeine Java-Themen 7
H Problem mit Scanner Klasse Allgemeine Java-Themen 7
E Wie Zeichen eingeben mit Klasse Scanner? Allgemeine Java-Themen 5
D Problem mit java.util.scanner: Falsche Ergebnisse Allgemeine Java-Themen 4
E Scanner Frage :) Allgemeine Java-Themen 8
S Problem mit Scanner Allgemeine Java-Themen 5
G Barcode (Strichcode)-Scanner Allgemeine Java-Themen 10
G Scanner.hasNext() beendet den Thread ohne Message Allgemeine Java-Themen 4
S Scanner Allgemeine Java-Themen 6
G Scanner-Generator zur Erkennung von Java Tokens Allgemeine Java-Themen 7
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
K Scanner.hasNext findet kein Ende Allgemeine Java-Themen 6
D ProcessBuilder und Scanner Probleme mit einigen Prozessen Allgemeine Java-Themen 2
S Die Methode close() der Klasse Scanner Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben