2012-11-30 25 views
0

我正在試圖在簡單的Java程序中使用java.util.Scanner來讀取下面的文本文件。用Java中的Scanner讀取文本文件 - 令牌的返回字符

scanner = new Scanner(filerader).useDelimiter("\\;|\\n"); 
while (scanner.hasNext()) { 
    int id= scanner.nextInt(); 
    String name = scanner.next(); 
    String code = scanner.next(); 

    System.out.printf(".%s.%s.%d.\n", name, code, id); 
} 

結果如下::

0001;GUAJARA-MIRIM;RO 
0002;ALTO ALEGRE DOS PARECIS;RO 
0003;PORTO VELHO;RO 

我使用下面的代碼讀取的文本文件

.GUAJARA-MIRIM.RO.1 
. 
.ALTO ALEGRE DOS PARECIS.RO.2 
. 
.PORTO VELHO.RO.3 
. 

但每一行的第三令牌的結果具有incovenient「\最後的標籤(ANSI代碼13)。我不知道爲什麼(我使用格式化字符串上的'。'字符來清除'\ r'的位置)。

所以,

  1. 爲什麼有一個 '\ r' 在第三令牌的結束?
  2. 如何繞過它。

使用類似code.substring(0, 2)這樣的解決方法非常簡單,但我想了解爲什麼在那裏存在'\ r'字符。

+0

嗨!我該怎麼做?我看到我的費率是0%,但我不知道如何改變它。 –

+0

只需點擊問題答案旁邊的複選標記之一 – durron597

回答

1

在某些文件系統(特別是Windows)中,\r\n使用了一個新行字符。您僅使用\n分隔符,因此\r保持不變。在您的分隔符中添加\r

爲使您的代碼更健壯一些,請使用System.lineSeparator()來獲取新的行字符並相應地使用分隔符。

+0

我使用了模式「\\; | \\ r \\ n」,它工作的很好! 感謝您的解釋。 –

+0

@RafaelBorja很高興知道。請接受你喜歡的答案。 –

1

您正在使用Windows文件,該文件使用\r\n作爲行分隔符(又名回車換行符)。 Unix只使用\n(換行)。

要解決此問題,請將\r添加到掃描程序分隔符中。

0

它發生的原因已經給出了,其他避免這種情況的方法是使用scanner.nextLine()然後拆分; 。

相關問題