我有一些字符串需要分隔为“纬度”和“经度”以获取LatLng,但是,不知道如何通过定界符分隔以将其提取。
字符串为:{location: 40.748817,-73.985428}
我需要将其分为Lat和lng来创建标记,并且不知道如何
答案 0 :(得分:1)
尝试一下!
//If String
String location = 'location: 40.748817,-73.985428';
List<String> latAndLong =
location.replaceFirst(' ', '').replaceAll('location:', '').split(',');
LatLng latLng = new LatLng(double.parse(latAndLong[0]),double.parse(latAndLong[1]));
//If Map/JSON
var location2 = {'location': '40.748817,-73.985428'};
String locationExtracted = location2['location'].toString();
List<String> latAndLong2 =
locationExtracted.replaceFirst(' ', '').replaceAll('location:', '').split(',');
LatLng latLng2 = new LatLng(double.parse(latAndLong2[0]),double.parse(latAndLong2[1]));
答案 1 :(得分:1)
根据实际的输入格式,它可能会更容易或更难。
如果输入实际上是格式为{"location": "40.748817,-73.985428"}
的JSON映射,则只需先将其解析为JSON,然后以逗号分隔字符串即可:
List<double> parseCoordinates(String source) {
var parts = jsonParse(source)["location"]?.split(",");
if (parts == null || parts.length != 2) {
throw FormatException("Not valid location coordinates", source);
}
return [double.parse(parts[0], double.parts[1])];
}
如果输入实际上是格式为{location: 40.748817,-73.985428}
的字符串(不是有效的JSON),那么看起来实际上是最容易用RegExp解决的问题。
示例:
final _coordRE = RegExp(r"^\{location: (-?\d+(?:.\d+)), (-?\d+(?:.\d+))\}$");
List<double> parseCoordinates2(String source) {
var match = _coordRE.firstMatch(source);
if (match == null) throw FormatException("Not valid coordinates", source);
return [double.parse(match[1]), double.parse(match[2])];
}
,然后将其用作
var coords = parseCoordinates(source);
var lat = coords[0];
var lng = coords[1];
或者,由于您非常精确地了解格式,因此您可以自己提取子字符串,而不必使用RegExp:
List<double> parseCoordinates(String source) {
var prefix = "{location: ";
if (source.startsWith(prefix) && source.endsWith("}")) {
var commaIndex = source.indexOf(",", prefix.length);
if (commaIndex >= 0) {
var lat = double.parse(source.substring(prefix.length, commaIndex));
var lng = double.parse(source.substring(commaIndex + 1, source.length - 1));
return [lat, lng];
}
}
throw FormatException("Not valid coordinates", source);
}
如果格式变化幅度超出示例(也许以-.5
作为坐标,而没有前导0
),则必须调整正则表达式。一种选择是让捕获组仅捕获[-.\d]+
并依靠双重解析器来处理语法错误。
答案 2 :(得分:0)
您是否尝试过功能jsonDecode
?它会返回动态信息。
var coordinate = jsonDecode('[your json string]');
print(coordinate['location']);
然后剩下的就是使用split()
函数将其拆分为令牌。
祝你好运。