Java NumberFormatException Float的错误字符串

时间:2017-09-07 20:17:29

标签: java numberformatexception

获取字符串列表并将它们转换为浮点数并存储值。当我想要存储的第二个值时,我收到此错误。以下是我读的代码和文本文件:

    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)

1 个答案:

答案 0 :(得分:0)

正如所有评论者已经说过的那样:没有实际数据,它或多或少地猜测,问题是什么,但是对于你的代码和错误信息,一些事情已经可以说,你应该做什么独立:

您阅读了所有行并将它们放入StringBuilder,包括新的换行符。稍后你会进行拆分,但是你永远不会删除这个换行符,所以它会在你尝试解析为float的数据中结束。这将导致解析错误,因为空格和其他空格不会被删除。在不改变代码过多的情况下执行此操作的最简单方法是修剪值:

cities[counter] = new City(Float.parseFloat(locations[i+1].trim()), Float.parseFloat(locations[i+2],trim()));

顺便说一句:创建新变量counter的原因是i-1,后来又使用i+1i+2?使你的代码读得更难一些,因为你期望一些额外的逻辑,其中跳过条目而不存在。

根据错误消息,问题是引号和换行符。你不能说这两个被解析的值中的第一个或第二个是否发生错误,没有输入文件的原始行,很难说,发生了什么,但也许我给了你足够的允许您使用代码进行提示。

如果不是,我们需要更多信息,尤其是产生此错误的行,因此可以分析您的代码。