繁体   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