如果多个字符串组成数字,如何解析double

时间:2013-11-09 17:31:39

标签: java android

编辑解决: 我是傻瓜。在一个案例中,输入字符串比我想象的要长(它们已经损坏),因此一些美国数据进入欧洲测试并且当两个双打与“。”连接在一起时引起异常。创建一个包含三个小数点的字符串。改为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();
    }

3 个答案:

答案 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)

我是傻瓜。在一个案例中输入字符串比我想象的要长,因此一些美国数据进入欧洲测试并且当两个双打与“。”连接在一起时引起异常。创建一个包含三个小数点的字符串。将7改为8,原始代码就好了。 对于所有在这个问题上花时间的人抱歉。 顺便说一句,它是一个损坏的数据文件,7应该有效: - )

为了将来安全,我将测试更改为

if (!line.contains(".")){ // europe

如果此测试失败,则不是美国号码。最大的法定数字是180,所以永远不会得到“。”如果不是美国型号。