我遇到了从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,我有另一个类将变量存储到该类型的数组中。
如果您需要查看更多代码,请告诉我们!感谢。
答案 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);