簡體   English   中英

Java String.split()-NumberFormatException

[英]Java String.split() - NumberFormatException

所以,這是東西,我有以下代碼:

public static void main(String[] args) {
    try {
        FileInputStream fstream = new FileInputStream("test.txt");
        // Use DataInputStream to read binary NOT text.
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        String strLine = br.readLine();
        String[] split = strLine.split(" ");

        System.out.println(Integer.parseInt(split[0]));
        in.close();
    }
    catch (Exception e) {//Catch exception if any
        System.err.println("Error: " + e);
    }
}

假設我有一個名為test.txt的文件,只有“ 6 6 ”。 因此,它將讀取第一行並將該行拆分為兩個字符串。 問題是我可以將Integer.parseInt用於split [1],但是不能對split[0]使用該方法( System.out.println(split[0])打印“ 6 ”),該輸出我的錯誤:

Error: java.lang.NumberFormatException: For input string: "6"

更新:這可能是日食的問題,因為如果我使用javac在終端中編譯.java文件,我不會得到任何異常!:))

UPDATE2:解決了。 與凱特(Kate)一起保存時出了點問題。 不知道是什么,但是gedit效果更好:D謝謝大家。

只需嘗試:hexdump -C test.txt如果您使用的是Linux,則可以看到您擁有的不可打印字符。

另外trim()回答也很好。

文件開頭的問題通常歸因於BOM ,某些軟件(實際上主要是記事本)喜歡將BOM放在Unicode文件的開頭。

在良好的文本編輯器中打開文件,並將其配置為保存不帶BOM的文件。

如果無法更改文件,請在讀取文件時跳過第一個字符。

我會嘗試以下方法排除虛假/意外字符:

.. setup/read code in main method...
String[] split = strLine.split(" ");
for (String s : split) {
      System.out.println(String.format("[%s] => integer? %b", s, isInteger(s)));
}
... the rest of the main method....


private static boolean isInteger(String n) {
    try {
        Integer.parseInt(n);
    } catch(NumberFormatException e) {
        return false;
    }
    return true;
}

如果您在方括號之間看到任何不是數字或整數的地方? 返回錯誤多數民眾贊成在可能

如果您能夠確定正在讀取的文件的實際編碼,則可以對其進行顯式設置,以便將任何多余的字節正確地轉換為字符。

new InputStreamReader(new FileInputStream(...), <encoding>)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM