1

所以,事情就是这样,我有这个代码:

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"

更新:这可能是 Eclipse 的问题,因为如果我在终端中使用 javac 编译我的 .java 文件,我不会得到任何异常!:))

更新2:解决了。与凯特一起保存时出了点问题。不知道是什么,但 gedit 效果更好:D 谢谢大家。

4

4 回答 4

0

试试看: hexdump -C test.txt 如果你有 linux,你可以看到你拥有的不可打印的字符。

trim() 回答也很好。

于 2013-02-28T18:31:35.517 回答
0

文件开头的这个问题通常是由于BOM,某些软件(实际上主要是记事本)喜欢将其放在 Unicode 文件的开头。

在一个好的文本编辑器中打开文件并将其配置为在没有 BOM 的情况下保存文件。

如果您无法更改文件,请在阅读时跳过第一个字符。

于 2013-02-28T18:36:23.780 回答
0

我会尝试以下方法来排除虚假/意外字符:

.. 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;
}

如果您在方括号之间看到任何不是数字或整数的东西?返回 false 那可能是问题所在

于 2013-02-28T18:37:02.117 回答
0

如果您能够确定您正在阅读的文件的实际编码,则可以显式设置它,以便将任何额外的字节正确转换为字符。

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

于 2013-02-28T18:51:03.143 回答