2010-02-12 56 views
3

我正在做一個簡單的練習,而且我對java函數parseInt的工作原理有點困惑。我從輸入文件中讀取一行,使用StringTokenizer分割它,現在我想將每個部分解析爲一個整數。爲什麼Integer.parseInt在輸入上拋出NumberFormatException似乎有效?

我已經在監視窗口,所述parseInt函數函數的輸入是確實這似乎是有效的整數(例如,「35」)的字符串檢查。然而,當我嘗試使用str.charAt功能上我的變量str抱着值「35」,我得到了奇怪的結果:

str.charAt(0) == "" 
str.charAt(1) == "3" 
str.charAt(2) == "" 
str.charAt(3) == "5" 

這似乎是可能以某種方式涉及到編碼問題,所以我已經試過使用的讀取文件這種方式來解決這個問題:

InputStreamReader reader = new InputStreamReader(new FileInputStream(inputfile), "UTF-8"); 

(我已經明確地保存使用我的編輯UTF-8編碼的文件),但是這並沒有幫助。任何想法可能是什麼問題,以及如何解決它?

編輯:我的樣品

 InputStreamReader reader = new InputStreamReader(new FileInputStream(inputfile), "UTF-8"); 
     BufferedReader bfreader = new BufferedReader(reader); 

     line = bfreader.readLine(); 
     while (line !=null) 
     { 
       String[] valueStrings = line.split(" "); 
       String hole = valueStrings[0]; 

       int[] values = new int[4]; 
       for (int i = 0; i <values.length; i++){ 

        String nr = valueStrings[i+1].trim(); 
        values [i] = Integer.parseInt(nr); 
       } 

       // it breaks at the parseInt here, the rest is not even executed... 

     } 

回答

11

我的猜測是,它的實際上

str.charAt(0) == '\0' 
str.charAt(1) == '3' 
str.charAt(2) == '\0' 
str.charAt(3) == '5' 

這聽起來像它可能實際保存在UTF-16而不是UTF-8 - 但如果你的文本編輯器認爲它是意味着保存「空」字符,這是有道理的。嘗試在二進制十六進制編輯器查看的文本文件 - 我懷疑你會發現,每一個字節爲0

如果沒有幫助,請發表一個簡短而完整的程序,這表明了問題 - 到目前爲止我們只看到了一行代碼。

+0

你是正確的實際上,我在十六進制編輯器檢查它和每個第二個字符是零。無論如何,我如何從這樣的文件讀取? – 2010-02-12 20:57:29

+1

將字符集設置爲UTF-16應將其讀入,或將該文件保存爲UTF-8或系統默認值。 – 2010-02-12 21:00:00

+0

文件讀取得很好,問題在於parseInt在嘗試解析字符串時失敗。有沒有辦法解決這個問題? – 2010-02-12 21:10:05

相關問題