获取字符串列表并将它们转换为浮点数并存储值。当我想要存储的第二个值时,我收到此错误。以下是我读的代码和文本文件:
public static void readCities() {
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("C:/Users/Luke/workspace/Traveling Sales Person/Destinations/11PointDFSBFS.tsp"));
String line;
while ((line = br.readLine()) != null) {
if (sb.length() > 0) {
sb.append("\n");
}
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
String contents = sb.toString();
String[] parts = contents.split("NODE_COORD_SECTION");//splits into locations
String[] locations = parts[1].split(" ");
int counter = 0;
for (int i = 1; i < locations.length; i++) {
cities[counter] = new City(Float.parseFloat(locations[i+1]), Float.parseFloat(locations[i+2]));
counter++;
}
}
代码错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "63.860370
2
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at TSP.readCities(TSP.java:132)
at TSP.main(TSP.java:28)
答案 0 :(得分:0)
正如所有评论者已经说过的那样:没有实际数据,它或多或少地猜测,问题是什么,但是对于你的代码和错误信息,一些事情已经可以说,你应该做什么独立:
您阅读了所有行并将它们放入StringBuilder
,包括新的换行符。稍后你会进行拆分,但是你永远不会删除这个换行符,所以它会在你尝试解析为float的数据中结束。这将导致解析错误,因为空格和其他空格不会被删除。在不改变代码过多的情况下执行此操作的最简单方法是修剪值:
cities[counter] = new City(Float.parseFloat(locations[i+1].trim()), Float.parseFloat(locations[i+2],trim()));
顺便说一句:创建新变量counter
的原因是i-1
,后来又使用i+1
和i+2
?使你的代码读得更难一些,因为你期望一些额外的逻辑,其中跳过条目而不存在。
根据错误消息,问题是引号和换行符。你不能说这两个被解析的值中的第一个或第二个是否发生错误,没有输入文件的原始行,很难说,发生了什么,但也许我给了你足够的允许您使用代码进行提示。
如果不是,我们需要更多信息,尤其是产生此错误的行,因此可以分析您的代码。