[英]Number Format Exception on a string when parsing it as a Double
我遇到了從Web服務器上讀取文本文件並將該字符串解析為Double以用於后續操作的問題。 這是我正在讀取的Web服務器中的示例行。
樣品線:
“ 00501”,“ + 40.922326”,“-072.637078”,“ HOLTSVILLE”,“ NY”,“ SUFFOLK”,“ UNIQUE”
-數據用逗號分隔,因此我為此使用了定界符。
這就是我試圖解析double值的方式:
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)
Processor是所有這些東西所在的類。應用程序通過對象的void方法readData調用它,而我還有另一個類將變量存儲到該類型的數組中。
讓我知道您是否需要查看更多代碼! 謝謝。
如您所見, "+40.922326"
在數字"+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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.