将字符串解析为Double时,字符串上的数字格式异常

时间:2015-02-14 21:07:33

标签: java numberformatexception

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

示例行:

  

“00501”, “+ 40.922326”, “ - 072.637078”, “HOLTSVILLE”, “NY”, “SUFFOLK”, “独特的”

-Data用逗号分隔,所以我正在使用分隔符。

这就是我试图解析双值的方法:

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

我有一个数字格式异常的记录来打印消息,我得到:

  

输入字符串:“”+ 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)

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

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

3 个答案:

答案 0 :(得分:1)

正如您所看到的,"+40.922326"在数字周围有双引号。那是无法解析的。在解析数字之前,你必须删除引号。

答案 1 :(得分:1)

您需要删除数字开头和结尾的引号。您可以编写一个简单的方法来执行此操作:

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

答案 2 :(得分:0)

您还可以使用substring()方法删除双引号。

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