Вы использовали pointsString.split("lat/lng: ")
4 раза, но никогда не распечатывали, но оно имеет значение следующее. При разделении вы получаете части, которые находятся до и после разделителя, поэтому у вас есть пустой контент перед первым.
[, (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<MatchResult>
равна
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());
}