在Kotlin中如何将坐标字符串转换为Pair类型列表?
Kotlin中转换坐标字符串为Pair<Double, Double>列表
针对你收到的这种双层方括号包裹的坐标字符串,有两种可靠的转换方式,推荐用正则表达式处理,适配更多格式细节:
方法一:正则表达式匹配(推荐)
利用正则直接捕获每个坐标对的两个数值,自动忽略首尾外层方括号、换行、空格等格式差异:
val coordinateStr = """[[45.02498, 7.55163], [45.02527, 7.55167], [45.02556, 7.55172], [45.02564, 7.55173], [45.02582, 7.55175], [45.02582, 7.55188], [45.02585, 7.55202], [45.02593, 7.55213], [45.026, 7.55218]]""" // 匹配每个坐标对的正则,捕获两个数值 val regex = Regex("""\[(\d+\.?\d*),\s*(\d+\.?\d*)\]""") val coordinateList: List<Pair<Double, Double>> = regex.findAll(coordinateStr) .map { match -> val first = match.groupValues[1].toDouble() val second = match.groupValues[2].toDouble() first to second } .toList()
正则说明
\[和\]:匹配坐标对的左右方括号(\d+\.?\d*):捕获整数或小数格式的数值(兼容45或45.02498这类写法),\s*:匹配逗号和任意数量的空格(适配换行或多空格的情况)
方法二:字符串切割(格式严格时可用)
如果能确定字符串格式完全规范,没有额外空格或换行干扰,也可以直接切割处理:
val coordinateStr = """[[45.02498, 7.55163], [45.02527, 7.55167], [45.02556, 7.55172], [45.02564, 7.55173], [45.02582, 7.55175], [45.02582, 7.55188], [45.02585, 7.55202], [45.02593, 7.55213], [45.026, 7.55218]]""" // 去掉首尾的外层方括号 val cleanedStr = coordinateStr.trimStart('[').trimEnd(']') val coordinateList: List<Pair<Double, Double>> = cleanedStr.split("], [") .map { pairStr -> val (lat, lon) = pairStr.split(", ").map(String::toDouble) lat to lon }
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

