我正在编写一个Java程序,它接受一个文本文件,将其分隔在空格和>
上,然后通过Integer.parseInt()
和Double.parseDouble()
来操纵这些数字。
然而,每当我尝试运行我的程序时,我都会得到一个NumberFormatException
,因为显然我的程序正在为令牌拾取空白空间。下面是我的代码,文本文件和错误。
代码:
try {
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()){
String line = scanner.nextLine();
String[] tokens = line.split(" |>");
State s = new State(Integer.parseInt(tokens[1]), 0,
Double.parseDouble(tokens[0]), null);
states.put(s.state, s);
for(int i = 3; i < tokens.length; i++) {
if(tokens[i + 2] == null || tokens[i] == "")
break;
else
edges.add(new Edge(Integer.parseInt(tokens[i]),
Double.parseDouble(tokens[i + 1])));
}
}
scanner.close();
} catch (FileNotFoundException e) {
System.err.println("Error: file could not be found");
}
要解析的文本文件:
1 0 > 1 6 2 6 3 6
1 1 > 4 -1
1 2 > 8 -1
1 3 > 9 -1
1 4 > 1 -1 5 -1 6 -1
1 5 >
1 6 > 7 -1 8 -1
1 7 >
1 8 > 7 -1
0 9 >
错误讯息:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at csu.mcdonald.ASrch.main(ASrch.java:33)
答案 0 :(得分:1)
我试图执行你的程序。我注意到通过分割变量&#39; line&#39;来获取字符串数组。将导致数组
[1, 0, , , 1, 6, 2, 6, 3, 6]
这就是行
的原因edges.add(new Edge(Integer.parseInt(tokens[i]),
Double.parseDouble(tokens[i + 1])));
正在抛出异常。
这里tokens [i]是一个空字符串,它将抛出 NumberFormatException
请检查你的逻辑。
答案 1 :(得分:0)
尝试用此代替以下代码,应解决您的问题。
拆分输出为 - [1, 0, , , 1, 6, 2, 6, 3, 6]
旧代码
if(tokens[i + 2] == null || tokens[i] == ""))
新代码
if(tokens[i + 2] == null || tokens[i].equals(""))