Java Integer.parseInt()问题

Java Integer.parseInt()问题,java,integer,parseint,Java,Integer,Parseint,我在尝试让代码正常工作时遇到了一些问题。我正在为我的计算机科学课做一个项目,我必须让我的程序读取文件并执行一些数学运算。当我尝试这样做时,代码不起作用。然后我和一个写了完全相同代码的朋友核实了一下,结果它不起作用 程序读取的输入.txt文件如下所示: 2/3,4/5 -1/6,2/4 1/1,1/1 我编写的代码如下所示: import javax.swing.JFileChooser; 导入java.util.*; 公共类项目测试 { 公共静态void main(字符串[]args)引发异常

我在尝试让代码正常工作时遇到了一些问题。我正在为我的计算机科学课做一个项目,我必须让我的程序读取文件并执行一些数学运算。当我尝试这样做时,代码不起作用。然后我和一个写了完全相同代码的朋友核实了一下,结果它不起作用

程序读取的输入.txt文件如下所示: 2/3,4/5 -1/6,2/4 1/1,1/1

我编写的代码如下所示:

import javax.swing.JFileChooser;
导入java.util.*;
公共类项目测试
{
公共静态void main(字符串[]args)引发异常
{           
JFileChooser chooseratrial=新的JFileChooser();
int returnValRational=chooserRational.showOpenDialog(null);
if(returnValRational==JFileChooser.APPROVE_选项)
{
System.out.println(“您选择打开此文件:+chooserRational.getSelectedFile().getName());
扫描仪输入=新扫描仪(选择serational.getSelectedFile());
while(input.hasNext()==true)
{
String line=input.nextLine();
字符串[]输出=行。拆分(“,”);
字符串[]output1=输出[0]。拆分(“/”;
字符串[]output2=输出[1]。拆分(“/”;
字符串a=输出1[0];
字符串b=输出1[1];
字符串c=输出2[0];
字符串d=输出2[1];
int int1=整数.parseInt(a);
int int2=整数.parseInt(b);
int int3=整数.parseInt(c);
int int4=整数.parseInt(d);
System.out.println(int1+“”+int2+“”+int3+“”+int4);
}
input.close();
}
}
}
当我只输出字符串a、b、c和d时,代码工作得非常好,输出的值也非常好。但是,当代码看到
Integer.parseInt(a)
时,它会给出如下错误:

线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“?2” 位于java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在java.lang.Integer.parseInt(Integer.java:580)处 在java.lang.Integer.parseInt(Integer.java:615) 位于ProjectTest1.main(ProjectTest1.java:33) 任何帮助都将不胜感激。

您应该更换

String line = input.nextLine();

因为在同一行上有多组数据

编辑:


我运行了你的代码,没有得到与你相同的异常。由于
nextLine
调用,我有一个
NumberFormatException
,我现在修复了它,它运行时没有错误。我想和其他人一样,你也有编码问题。在internet上搜索如何在首选文本编辑器上显示不可见字符。

,因为您的数据文件包含不可见字符

您有两种选择:编辑源数据文件以删除BOM表,或者可以添加一些代码来处理BOM表。对于第一个选项,使用记事本++并删除BOM表。关于第二个备选方案:

Scanner input = new Scanner(chooserRational.getSelectedFile());

if (input.nextByte() == 0xFE) {
  input.nextByte();
  input.nextByte();
} else {
  input = new Scanner(chooserRational.getSelectedFile());
}

input.hasNext()==true是冗余使用input.hasNext()instead只需将+粘贴的代码复制到我的机器上,它就能正常工作(java版本“1.8.0_05”),您的输入文本是否包含“?2”。看起来您正在分析不是整数的字符串“?2”。因此,只需在调用Integer.parseInt之前打印出字符串,并确保字符串实际上是整数。
Scanner input = new Scanner(chooserRational.getSelectedFile());

if (input.nextByte() == 0xFE) {
  input.nextByte();
  input.nextByte();
} else {
  input = new Scanner(chooserRational.getSelectedFile());
}