我有一个像这样的字符串
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;
}
但是当我尝试运行它时,我得到了这样的错误
有人可以帮助我解决我的问题&gt; _&lt;
答案 0 :(得分:2)
并确认GPS_LATITUDE = Double.valueOf(TEMP_LAT);
TEMP_LAT
在那里不为空 - 因为NullPointerException异常,而不是NumberFormatException。
答案 1 :(得分: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()
,但第一种方法更清晰。
答案 2 :(得分: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(",")
是一个很好的起点。
答案 3 :(得分:0)
使用Double.parseDouble(TEMP_LAT);