2010-05-23 53 views
6

我有一個像掃描儀後,2400個字符

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

一些非常基本的代碼,其中的掃描是通過文件掃描儀切斷我的字符串。

但是,在一個特定的行上,大約6k個字符長,臨時剪掉2470個字符之後。沒有什麼特別的,當它被切斷時,它位於「澳大利亞」一詞的中間。如果我從字符串中刪除字符,它刪除的地方會發生變化;例如如果我刪除文件中的字符0-100,那麼Scanner將獲得之前的100-2570。

我以前使用掃描儀獲取較大的字符串。任何想法可能會出錯?

回答

8

根據猜測,你可能在截點處有一個流氓角色:在十六進制編輯器中查看文件,而不僅僅是文本編輯器。也許有一個嵌入的空字符,或可能在字符串中間的\rScanner.nextLine()似乎不太可能會任意砍掉它。

另一個想法是,你100%確定它是而不是所有?也許System.out.println正在切斷字符串 - 再次是由於嵌入了一些「奇怪」的字符?如果您打印temp.length()會發生什麼情況?

編輯:我錯誤地解釋瞭如果你切出一些字符會發生什麼。對於那個很抱歉。一些其他的事情要檢查:

  • 如果你閱讀的BufferedReader.readLine()代替Scanner線,它得到的一切?
  • 你指定正確的編碼?我不明白爲什麼會以這種特殊方式顯示,但這是需要考慮的問題...
  • 如果將行中的所有字符替換爲「A」(在文件中),那麼這是否會改變任何內容?
  • 如果你在這一行之前添加一行(或者在它之前刪除一行)是否會改變任何內容?

做不到這一切,我只是調試到Scanner.nextLine() - 關於Java漂亮的事情之一就是你可以調試到標準庫。

+0

當我打印出長度時,這絕對不是全部。 對於上下文,這是一個從Excel導出的.csv文件,我在vim中編輯。 我不認爲那裏有任何特殊的字符;正如我所說的,如果我刪除了字符,截斷點會改變。因此,當它在「澳大利亞」中間被切斷時,如果我在「澳大利亞」,「澳大利亞」之前的某個地方刪除了一百個字符,並且在它打印之後的下一個約90個字符處罰款。 同樣的事情發生在下一行,只有它切斷在112而不是2470.這是唯一的兩行不起作用。一些線條更長。 – Ventrue 2010-05-23 08:00:20

+0

只需在一個十六進制編輯器中查看它,它很好,只是ascii值。第二行在't'和撇號之間切出。 – Ventrue 2010-05-23 08:08:27

+0

@Ventrue:LOL - 我只是*添加了一個編輯來使用十六進制編輯器重新編輯。嗯。我已經添加了一些其他建議 - 但「調試到它」可能會變成你需要的... – 2010-05-23 08:09:45