2010-05-23 10 views
6

Ich habe einige sehr grundlegende Codes wieScanner schneidet meinen String nach etwa 2400 Zeichen

while (scan.hasNextLine()) 
{ 
    String temp = scan.nextLine(); 
    System.out.println(temp); 
} 

wo Scan ist ein Scanner über eine Datei aus.

Allerdings, auf einer bestimmten Zeile, die etwa 6k Zeichen lang ist, schneidet die Temperatur nach etwa 2470 Zeichen. Es ist nichts Besonderes, wenn es ausfällt; Es ist in der Mitte des Wortes "Australien". Wenn ich Zeichen aus der Zeile lösche, ändert sich die Stelle, an der sie sich entfernt. z.B. Wenn ich die Zeichen 0-100 in der Datei lösche, erhält der Scanner das, was vorher 100-2570 war.

Ich habe Scanner für größere Saiten vorher verwendet. Irgendeine Idee, was könnte schief gehen?

Antwort

8

Bei einer Schätzung haben Sie möglicherweise ein Rogue-Zeichen am Cut-Off-Punkt: Betrachten Sie die Datei in einem Hex-Editor, anstatt nur einen Texteditor. Vielleicht gibt es ein eingebettetes Nullzeichen oder möglicherweise \r in der Mitte der Zeichenfolge? Es scheint mir unwahrscheinlich, dass Scanner.nextLine() es nur willkürlich hacken würde.

Wie ein anderer Gedanke, bist du 100% sicher, dass es nicht alles ist? Vielleicht zerhackt System.out.println die Zeichenkette - wieder wegen eines "ungeraden" Zeichens darin? Was passiert, wenn Sie temp.length() drucken?

EDIT: Ich habe das Bit falsch interpretiert was passiert, wenn Sie einige Zeichen ausschneiden. Das tut mir leid. Ein paar andere Dinge zu überprüfen:

  • Wenn Sie die Zeilen mit BufferedReader.readLine() statt Scanner lesen, ist es alles bekommen?
  • Geben Sie die richtige Codierung an? Ich kann nicht sehen, warum das auf diese besondere Weise angezeigt würde, aber es ist etwas zum Nachdenken ...
  • Wenn Sie alle Zeichen in der Zeile mit "A" ersetzen (in der Datei) ändert das irgendetwas?
  • Wenn Sie vor dieser Zeile eine zusätzliche Zeile hinzufügen (oder eine Zeile davor entfernen), wird dadurch etwas geändert?

all dies Andernfalls würde ich nur debuggen in Scanner.nextLine() - eines der schönen Dinge über Java ist, dass Sie können Debug in den Standardbibliotheken.

+0

Es ist definitiv nicht alles da, wenn ich die Länge ausdrucke. Für den Kontext ist dies eine CSV-Datei aus Excel exportiert, die ich in VIM bearbeite. Ich glaube nicht, dass da irgendwelche Sonderzeichen drin sind; Wie gesagt, wenn ich Zeichen lösche, ändert sich der Cut-off-Punkt. So während es mitten in "Australia" abschneidet, wenn ich irgendwo vor "Australia", "Australia" und den nächsten ~ 90 Zeichen nachher 100 Zeichen lösche, geht es ganz gut. Das gleiche passiert in der nächsten Zeile, nur schneidet es bei 112 statt 2470 ab. Das sind die einzigen zwei Zeilen, die nicht funktionieren. Einige der Linien sind länger. – Ventrue

+0

Ich habe es mir in einem Hex-Editor angeschaut und es ist in Ordnung, nur ascii Werte. Die zweite Zeile schneidet zwischen einem 't' und einem Apostroph. – Ventrue

+0

@Ventrue: LOL - Ich hätte * nur * eine Bearbeitung hinzugefügt, um mit einem Hex-Editor neu zu beginnen. Hmm. Ich habe ein paar andere Vorschläge hinzugefügt - aber das "Debugging in es" könnte sich herausstellen, was Sie brauchen ... –

Verwandte Themen