编辑解决: 我是傻瓜。在一个案例中,输入字符串比我想象的要长(它们已经损坏),因此一些美国数据进入欧洲测试并且当两个双打与“。”连接在一起时引起异常。创建一个包含三个小数点的字符串。改为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();
}
答案 0 :(得分:0)
你应该使用OutputStream。尝试使用此示例:
OutputStream baos = new ByteArrayOutputStream();
baos.write(mark[3].getBytes(), 0, mark[3].getBytes().length);
mark[3]=".";
baos.writeOneByte(mark[3].getBytes()[0]);
baos.write(mark[4].getBytes(), 0, mark[4].getBytes().length);
wLat = Double.valueOf(baos.toString());
希望这会起作用
答案 1 :(得分:0)
试试这个......
String s = "0,1,2,56,4567890";
String[] strings = s.split(",");
s = strings[3] + "." + strings[4];
System.out.println(Double.valueOf(s));
答案 2 :(得分:0)
为了将来安全,我将测试更改为
if (!line.contains(".")){ // europe
如果此测试失败,则不是美国号码。最大的法定数字是180,所以永远不会得到“。”如果不是美国型号。