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