【问题标题】:Java.lang.NumberFormatException error: empty string- Exchange Rate applicationJava.lang.NumberFormatException 错误:空字符串-汇率应用程序
【发布时间】:2018-06-26 13:12:41
【问题描述】:

我正在编写一个程序,它从http://www.tcmb.gov.tr/kurlar/today.xml 获取每日汇率并将它们保存到列表中。这是我的代码:

public class ParseTheXml {

    private List<CurrencyPojo> currencyList;


    public void setCurrencyList(List<CurrencyPojo> currencyList) {
        this.currencyList = currencyList;
    }

    public List<CurrencyPojo> getCurrencyList() throws ParserConfigurationException {
        currencyList = new ArrayList<CurrencyPojo>();

        try {
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            URL url = new URL("http://www.tcmb.gov.tr/kurlar/today.xml");
            Document document = builder.parse(url.openStream());

            NodeList nodeList = document.getElementsByTagName("Currency");

            for (int i = 0; i < nodeList.getLength(); i++) { // döngü her currency türü için
                Element element = (Element) nodeList.item(i);
                CurrencyPojo currencyPojoObject = new CurrencyPojo(); 

                currencyPojoObject.setCrossOrder(Integer.parseInt(element.getAttribute("CrossOrder")));
                currencyPojoObject.setKod(element.getAttribute("Kod"));
                currencyPojoObject.setCurrenyCode(element.getAttribute("CurrencyCode"));

                currencyPojoObject.setUnit(Integer.parseInt(element.getElementsByTagName("Unit").item(0).getTextContent()));
                currencyPojoObject.setIsim(element.getElementsByTagName("Isim").item(0).getTextContent());
                currencyPojoObject.setCurrencyName(element.getElementsByTagName("CurrencyName").item(0).getTextContent());
                currencyPojoObject.setForexBuying(Double.parseDouble(element.getElementsByTagName("ForexBuying").item(0).getTextContent()));


       currencyPojoObject.setForexSelling(Double.parseDouble(element.getElementsByTagName("ForexSelling").item(0).getTextContent()));  //  Last 3 codes have Emppty String errors
                currencyPojoObject.setBanknoteBuying(Double.parseDouble(element.getElementsByTagName("BanknoteBuying").item(0).getTextContent()));
                currencyPojoObject.setBanknoteSelling(Double.parseDouble(element.getElementsByTagName("BanknoteSelling").item(0).getTextContent()));

                currencyList.add(currencyPojoObject);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return currencyList;
    } 

在获得 ForexSelling、BanknoteBuying 和 Banknote Selling 值的部分,我得到了

java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at javaxmlparseandshow.ParseTheXml.getCurrencyList(ParseTheXml.java:55)
    at javaxmlparseandshow.ParseTheXml.main(ParseTheXml.java:75)

有人可以帮我解决这些问题吗?提前致谢。

【问题讨论】:

  • 参考parseDouble
  • 当你查看原始 XML 时,有些节点有时是空的,所以是的,你得到了一个 numberformatexception

标签: java xml parsing netbeans xml-parsing


【解决方案1】:

或者,您可以将 0 设置为空 xml 字符串

private double parseDouble(String val){
    if(val== null || val.isEmpty()) 
        return 0.0;
    else
        return Double.parseDouble(val);
}

前:

currencyPojoObject.setForexSelling(parseDouble(element.getElementsByTagName("ForexSelling").item(0).getTextContent())); 

【讨论】:

    【解决方案2】:

    我从错误堆栈跟踪中了解到, element.getElementsByTagName("ForexSelling") 字段没有数据。解析器尝试将空数据转换为字符串并抛出错误。 查看xml,您必须看到空字段。 作为一种解决方案,我认为您需要首先检查数据是否为空:

    【讨论】:

      【解决方案3】:

      你有没有尝试过

      String forexStr = element.getElementsByTagName("ForexSelling").item(0).getTextContent();
      if( /* forexStr conforms to your criteria like, for example: !forexStr.equals("")*/){
          currencyPojoObject.setForexSelling(Double.parseDouble(forexStr); 
      }
      

      ?

      【讨论】:

      • 我没有尝试过,我的主要问题是我错过了 XML 的空值,例如“HINESE RENMINBI”或“HINESE RENMINBI”。的 Forex Selling, BanknoteBuying 等。所以这就是问题所在,我将空白部分生成为 0.0,它解决了问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多