将字符串解析为 Double 时出现数字格式异常

Number Format Exception on a string when parsing it as a Double

我 运行 遇到了从 Web 服务器读取文本文件并将该字符串解析为 Double 以用于后续操作的问题。这是我正在读取的 Web 服务器的示例行。

示例行:

"00501","+40.922326","-072.637078","HOLTSVILLE","NY","SUFFOLK","UNIQUE"

-数据以逗号分隔,因此我为此使用了分隔符。

这就是我尝试解析双精度值的方式:

 String latitude = scan.next();
 tempLatitude = Double.parseDouble(latitude);
 String longitude = scan.next();
 tempLongitude = Double.parseDouble(longitude);

而且我有一个数字格式异常捕获来打印消息,我得到:

For input string: ""+40.922326""

和错误消息(没有 NFE 捕获):

Exception in thread "main" java.lang.NumberFormatException: For input string: ""+40.922326""
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at Processor.readData(Processor.java:44)
at Application.main(Application.java:12)

处理器是 class 所有这些东西所在的部分。应用程序通过一个对象调用它的 void 方法 readData 并且我有另一个 class 将变量存储到该类型的数组中。

如果您需要查看更多代码,请告诉我!谢谢

如您所见,"+40.922326" 在数字两边加了双引号。并且无法解析。在解析数字之前,您必须删除引号。

您需要删除数字开头和结尾的引号。你可以写一个简单的方法来做到这一点:

private double parseDouble(String string) {
    if(string.startsWith("\"")) {
        string = string.substring(1);
    }
    if(string.endsWith("\"")) {
        string = string.substring(0, string.length()-1);
    }
    return Double.parseDouble(string);
}

您还可以依靠正则表达式来解析用引号括起来的值:

private double parseDouble(String string) {
    Pattern pattern = Pattern.compile("\"?([+\-]?\d+(\.\d+)?)\"?");
    Matcher matcher = pattern.matcher(string);
    if (matcher.find()) {
        return Double.parseDouble(matcher.group(1));
    }
    return 0;
}

System.out.println(parseDouble("\"+40.922326\""));  // prints 40.922326
System.out.println(parseDouble("\"-40.922326\""));  // prints -40.922326

您也可以使用 substring() 方法去除双引号。

tempLatitude = Double.parseDouble(latitude.substring(1,latitude.length()-1);