Java String.split()-NumberFormatException

Java String.split()-NumberFormatException,java,string,numberformatexception,Java,String,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 InputSt

所以,事情是这样的,我有以下代码:

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个。所以,它读取第一行并将该行拆分为两个字符串。问题是我可以对拆分[1]使用Integer.parseInt,但无法对拆分[0]使用该方法 System.out.PrintLnSpilt[0]打印6,这会向我输出一个错误:

Error: java.lang.NumberFormatException: For input string: "6"
更新: 这可能是eclipse的问题,因为如果我用javac在终端中编译.java文件,我不会得到任何异常!:

更新2: 解决了的。和凯特一起存钱时出了点问题。不知道是什么,但gedit工作得更好:D
谢谢大家。

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


同样,修剪的答案也很好。

文件开头的这个问题通常是由于一个,一些软件(主要是记事本)实际上喜欢将它放在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;
}

如果在方括号中看到任何不是数字的东西,或者整数在哪里?返回false这可能是问题所在

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


新的InputStreamReadernew文件InputStream…,

您确定没有不可见的字符,例如可以作为第一个字符的BOM表吗?打印字符串的大小。TRUE。拆分[0]的长度是2,为什么只打印6?如何删除这些隐藏字符?可能是BOM表。在一个好的文本编辑器(而不是记事本)中打开文件,并将其配置为在不使用BOM的情况下保存文件。DataInputStream用于读取二进制数据。如果您正在读取文本文件,请不要使用它。因此,在hextdump-C test.txt之后,我得到的是|…2 6 |。它不是BOM,因为我用UTF-8保存了它,但没有BOM:/UPDATED:D