将字符串解析为 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);
我 运行 遇到了从 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);