我在尝试使用我的代码时遇到了一些问题。我正在为我的计算机科学课做一个项目,我必须让我的程序读取文件并执行一些数学运算。当我尝试这样做时,代码无法正常工作。然后我和一位编写完全相同代码的朋友核实了,但它没有用。
程序读取的输入.txt文件如下所示: 2 / 3,4 / 5 -1 / 6,2 / 4 1 / 1,1 / 1
我写的代码如下:
import javax.swing.JFileChooser;
import java.util.*;
public class ProjectTest
{
public static void main(String[] args) throws Exception
{
JFileChooser chooserRational = new JFileChooser();
int returnValRational = chooserRational.showOpenDialog(null);
if(returnValRational == JFileChooser.APPROVE_OPTION)
{
System.out.println("You chose to open this file: " + chooserRational.getSelectedFile().getName());
Scanner input = new Scanner(chooserRational.getSelectedFile());
while(input.hasNext() == true)
{
String line = input.nextLine();
String[] output = line.split(",");
String[] output1 = output[0].split("/");
String[] output2 = output[1].split("/");
String a = output1[0];
String b = output1[1];
String c = output2[0];
String d = output2[1];
int int1 = Integer.parseInt(a);
int int2 = Integer.parseInt(b);
int int3 = Integer.parseInt(c);
int int4 = Integer.parseInt(d);
System.out.println(int1 + " " + int2 + " " + int3 + " " + int4);
}
input.close();
}
}
}
当我只输出字符串a,b,c和d时,代码完美地运行并完美地输出值。但是,当代码看到Integer.parseInt(a)
时,它会给出一个如下所示的错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "?2"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at ProjectTest1.main(ProjectTest1.java:33)
非常感谢任何帮助。
答案 0 :(得分:2)
因为您的数据文件包含UTF-8 BOM。
您有两种选择:编辑源数据文件以删除BOM,或者您可以添加一些代码来处理BOM。对于第一个选项,请使用Notepad ++并删除BOM。对于第二种选择:
Scanner input = new Scanner(chooserRational.getSelectedFile());
if (input.nextByte() == 0xFE) {
input.nextByte();
input.nextByte();
} else {
input = new Scanner(chooserRational.getSelectedFile());
}
答案 1 :(得分:1)
你应该替换
String line = input.nextLine();
带
String line = input.next();
因为您在同一行上有多个数据组。
修改:
我运行了你的代码并没有得到与你相同的异常。由于NumberFormatException
调用,我有一个nextLine
,我现在修复了它,它运行时没有错误。我认为和其他人一样,你有编码问题。在互联网上搜索如何在首选文本编辑器上显示不可见字符。