2012-04-03 11 views
-1

ich einen Code haben, der mehr oder weniger wie folgt aussieht:Wie kann man vermeiden, die Scanner Position java Zurücksetzen

while(scanner.hasNext()) 
{ 
    if(scanner.findInLine("Test") !=null) { 
    //do some things 
    }else{ 
    scanner.nextLine(); 
    } 
} 

ich dies mit einem ~ 10MB Textdatei zu analysieren. Das Problem ist, wenn ich einen Haltepunkt auf while() und die scanner.nextLine() setzen, kann ich sehen, dass manchmal die Position des Scanners (im Debug-Fenster) auf Null zurückgeht. Ich glaube, das verursacht eine Art Loop-Explosion, weil die Regex in findInLine() bei Null beginnt, eine gewisse Menge an Text durchschaut, die Position vorrückt und dann zufällig auf Null zurückgesetzt wird, also muss es neu sein - wiederhole den ganzen Text noch einmal.

Irgendwelche Ideen, was kann das verursachen? Mache ich das überhaupt richtig?

Dank

einige zusätzliche Informationen:

Der Scanner wird von einem Input instanziiert. Nach dem Debuggen scheint es einen HeapCharBuffer zu geben, den der Scanner verwendet und der nur 1024 Zeichen gleichzeitig zulässt und dann zurücksetzt. Gibt es eine Möglichkeit, dies zu vermeiden oder die Dinge anders zu machen? Das scheint eine kleine Anzahl von Zeichen zu sein, die gescannt werden können.

Derek

+0

Was bedeutet die Eingabe aussehen? Wie wurde der Scanner instanziiert (was ist der Begrenzer)? Bitte schreiben Sie keinen Code, der "mehr oder weniger so" _ - den eigentlichen Code postet. –

+0

Der Scanner wird von einem InputStream instanziiert. Die Eingabe ist nur normaler ASCII-Text. Das Trennzeichen wird nicht geändert und sollte für diese Funktionen nicht besonders wichtig sein. – Derek

+0

Unabhängig davon MÜSSEN Sie eine Beispieleingabe veröffentlichen, die den Fehler verursacht. –

Antwort

4

Sie Misch Scanner.hasNext() und Scanner.nextLine(). Tu das nicht; Sie behandeln die Tokenisierung unterschiedlich.

Verwenden hasNext() mit next() oder hasNextLine() mit nextLine()

+0

Danke für die richtige Antwort. Ich bin mir nicht sicher, warum diese Frage abgelehnt wurde. Hasser Gon hasse ich denke – Derek