0

我有一个这样的字符串

106.826820,-6.303850,0

我从解析谷歌地图 KML 文档中得到。现在我想将它的字符串解析为 Double 这是我的代码:

public Double getLatitude(){
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){
        TEMP_LAT = "" + GPS_NAME.indexOf(posisi);
    }
    GPS_LATITUDE = Double.valueOf(TEMP_LAT);

    return GPS_LATITUDE;
}

public Double getLongitude(){
    int posisiakhir = GPS_NAME.indexOf(",");
    for(int i = 0; i < posisiakhir; i++){
        TEMP_LON = "" + GPS_NAME.indexOf(i);
    }
    GPS_LONGITUDE = Double.valueOf(TEMP_LON);

    return GPS_LONGITUDE;
}

但是当我尝试运行它时,我得到了这样的错误 在此处输入图像描述

有人可以帮我解决我的问题吗>_<

4

4 回答 4

2

并且确认GPS_LATITUDE = Double.valueOf(TEMP_LAT); TEMP_LAT那里不为空 - 因为异常是 NullPointerException 而不是 NumberFormatException。

于 2012-06-04T06:30:56.843 回答
2

你有空指针异常,所以你应该这样处理:

public Double getLatitude(){
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){
        TEMP_LAT = "" + GPS_NAME.indexOf(posisi);
    }
    if (TEMP_LAT != null) {
       GPS_LATITUDE = Double.parseDouble(TEMP_LAT);
    }

    return GPS_LATITUDE;
}

而对于转换为双倍,你应该使用Double.parseDouble()或者你也可以使用new Double(TEMP_LAT).doubleValue(),但第一种方法更干净。

于 2012-06-04T06:30:59.173 回答
1

除了 NPE 的可能原因之外,我真的不明白你的逻辑;在我看来,这完全是狡猾的。

只是一些例子:

GPS_NAME.indexOf(",")将返回-1一个小于正在搜索的字符串长度的索引。那么为什么有一个条件来检查它是否大于长度呢?posisi > GPS_NAME.length()永远不会是真的,因此 for 循环是无用的......

然后在你做的循环内TEMP_LAT = "" + GPS_NAME.indexOf(posisi)。从前面的评论中我们知道,要么是小于字符串长度的数字,posisi要么是其他数字。-1所以GPS_NAME.indexOf(posisi)将尝试在字符串中找到一个由整数posisi(这将是一个相当小的数字)表示的字符。这有什么意义?

我想建议你重新考虑你的逻辑——也许String.split(",")是一个很好的起点。

于 2012-06-04T06:44:43.503 回答
0

采用Double.parseDouble(TEMP_LAT);

于 2012-06-04T06:27:28.710 回答