所以,这就是问题,我有这个代码:
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进行拆分[1],但我不能将该方法用于split[0]
(System.out.println(split[0])
打印“ 6 ”),输出错误:
Error: java.lang.NumberFormatException: For input string: "6"
更新: 这可能是eclipse的问题,因为如果我使用javac在终端中编译我的.java文件,我不会有任何例外!:))
UPDATE2: 解决了。与凯特一起保存时出了点问题。不知道是什么,但是gedit效果更好:D 谢谢大家。
答案 0 :(得分:0)
试试:hexdump -C test.txt如果你有linux,你可以看到你不可打印的字符。
修剪()也回答它没问题。
答案 1 :(得分:0)
文件开头的这个问题通常是由BOM引起的,有些软件(实际上主要是记事本)喜欢把它放在Unicode文件的开头。
在一个好的文本编辑器中打开文件,并将其配置为保存没有BOM的文件。
如果您无法更改文件,请在阅读时跳过第一个字符。
答案 2 :(得分: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,这可能是问题
答案 3 :(得分:0)
如果您能够确定正在读取的文件的实际编码,则可以显式设置它,以便将任何额外的字节正确转换为字符。
new InputStreamReader(new FileInputStream(...), <encoding>)