我正在编写一个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)
最佳答案
尝试以此替换下面的代码,应该可以解决您的问题。
拆分的输出为-[1, 0, , , 1, 6, 2, 6, 3, 6]
旧代码
if(tokens[i + 2] == null || tokens[i] == ""))
新密码
if(tokens[i + 2] == null || tokens[i].equals(""))
关于java - 标记化数组中的空白空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26332790/