【问题标题】:How to parse this string of latitude/longitude coordinates in java?如何在java中解析这串纬度/经度坐标?
【发布时间】:2020-07-20 15:02:03
【问题描述】:

我有一个字符串,pointString。

我正在尝试从中获取数值并将它们添加到新的 LatLng 变量中。

这是我的代码

private ArrayList<LatLng> ConvertPoints (String pointsStringInput){
        ArrayList <LatLng> points = new ArrayList<LatLng>();
        String pointsString = pointsStringInput.substring(1, pointsStringInput.length()-1);
        for (int i = 0; i < pointsString.split("lat/lng: ").length; i++){
            Log.w("INDEX", String.valueOf(i));
            if (!pointsString.split("lat/lng: ")[i].matches("none12323232321412515152124214412")){
                points.add(new LatLng (Double.parseDouble(pointsString.split("lat/lng: ")[i].split(",")[0].replace("\\(", "")), Double.parseDouble(pointsString.split("lat/lng: ")[i].split(",")[1].replace("\\)", ""))));
            }
        }
        return points;

    }

它总是在 I=0 时崩溃,出现 java.lang.NumberFormatException: empty String

【问题讨论】:

  • 请保存你的计算,你做了pointsString.split("lat/lng: ") 4次;)
  • 请分享LatLng类。

标签: java string parsing format


【解决方案1】:

您确实使用了 4 次 pointsString.split("lat/lng: "),但从未将其打印出来,但它重视以下内容。当您拆分时,您会得到分隔符之前和之后的部分,因此您在第一个之前有空内容。

[, (43.8457509,-79.45568817), , (43.8457509,-79.45568817), , (43.84598041,-79.45584389), , (43.845954,-79.45585094]

使用正则表达式更容易,因为您完全知道数据应该如何lat/lng: \((-?\d+\.\d+),(-?\d+\.\d+)\)

  • \(\) 匹配真正的括号
  • -? 最终匹配一个减号
  • \d+\.\d+ 匹配值

  • lat/lng: \(-?\d+\.\d+,-?\d+\.\d+\) 最终正则表达式,然后只需添加 () 以捕获值

private ArrayList<LatLng> ConvertPoints(String pointsStringInput) {
    ArrayList<LatLng> points = new ArrayList<>();
    Matcher m = Pattern.compile("lat/lng: \\((-?\\d+\\.\\d+),(-?\\d+\\.\\d+)\\)").matcher(pointsStringInput);
    while (m.find()) {
        points.add(new LatLng(Double.parseDouble(m.group(1)), Double.parseDouble(m.group(2))));
    }
    return points;
}

Stream&lt;MatchResult&gt;的版本是

private List<LatLng> ConvertPoints(String pointsStringInput) {
    return Pattern.compile("lat/lng: \\((-?\\d+\\.\\d+),(-?\\d+\\.\\d+)\\)")
            .matcher(pointsStringInput).results()
            .map(m -> new LatLng(Double.parseDouble(m.group(1)), Double.parseDouble(m.group(2))))
            .collect(Collectors.toList());
}

【讨论】:

  • @user85421-Banned 是的,我不想拆分,我们可能遇到与第一次拆分相同的问题
猜你喜欢
  • 2021-06-27
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2013-02-14
  • 2011-06-14
相关资源
最近更新 更多