簡體   English   中英

將字符串解析為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”

-數據用逗號分隔,因此我為此使用了定界符。

這就是我試圖解析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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM