编辑解决:我很愚蠢。在一种情况下,输入字符串比我想象的要长(它们已损坏),因此一些美国数据进入欧洲测试并在两个双精度数与“。”连接在一起时导致异常。创建一个带三个小数点的字符串。将 7 更改为 8,原始代码就可以了。
对不起所有在这个问题上花时间的人。
编辑以在最后添加所有代码
我有一个 csv 文件,其中保存了欧洲十进制值,例如 12,345 我将数据解析为字符串,我的代码抛出异常。我已将其缩小到一行
这里是变量
String[] mark = line.split(",");
double wLat = 0;
这条线行不通
wLat = Double.parseDouble(mark[3] + "." + mark[4]);
这条线(对于非欧洲数据)有效
wLat = Double.parseDouble(mark[3]);
我可能在做一些愚蠢的事情,但这对谷歌来说很难,搜索 sa 也无济于事。我尝试了一个字符串生成器并追加,但 parseDouble 不适用于字符串生成器。我会很感激这方面的帮助。
艾伦
编辑:
// Read old marks
try {
// read all the old mark settings so we end up with the last ones
// this will restore settings on a restart
BufferedReader br;
br = new BufferedReader(new FileReader(baseDir + "/StartLine/Waypoint_log.csv"));
String line = null;
while ((line = br.readLine()) != null) {
String[] mark = line.split(",");
double wLat = 0;
double wLong = 0;
if (mark.length > 7){ // europe
//wLat = Double.parseDouble(mark[3] + "." + mark[4]);
//wLong = Double.parseDouble(mark[5] + "." + mark[6]);
}
else{ // normal case
wLat = Double.parseDouble(mark[3]);
wLong = Double.parseDouble(mark[4]);
}
int index = Integer.valueOf(mark[0]);
if (wLat >= -90 && wLat <= 90 && wLong >= -180 && wLong <= 180){
StartLine2.waypointNameArray[index] = mark[1];
StartLine2.waypointLat[index] = wLat;
StartLine2.waypointLong[index] = wLong;
StartLine2.waypointSet[index]=1;
index++;
}
}
br.close();
}
catch (Exception e) {
Toast toast=Toast.makeText(this, "No Marks Set",Toast.LENGTH_SHORT);
toast.show();
}