如何对存储坐标的ArrayList元素使用.split()拆分经纬度
解决方案
直接通过遍历原列表,对每个坐标字符串执行拆分、转换后存入对应列表即可,以下是完整的实现示例:
基础实现(Java 7及以上)
import java.util.ArrayList; public class CoordinateHandler { public static void main(String[] args) { // 初始化原坐标列表 ArrayList<String> rawCoordinates = new ArrayList<>(); rawCoordinates.add("91.826461 86.019730"); rawCoordinates.add("104.066800 30.572800"); rawCoordinates.add("116.407400 39.904200"); // 准备存储经度、纬度的列表 ArrayList<Double> longitudes = new ArrayList<>(); ArrayList<Double> latitudes = new ArrayList<>(); // 遍历处理每个坐标 for (String coord : rawCoordinates) { // 按空格拆分,若存在多空格/制表符,改用split("\\s+")更鲁棒 String[] splitResult = coord.split(" "); // 校验拆分结果格式,避免异常 if (splitResult.length == 2) { try { double lon = Double.parseDouble(splitResult[0]); double lat = Double.parseDouble(splitResult[1]); longitudes.add(lon); latitudes.add(lat); } catch (NumberFormatException e) { // 处理格式错误的数值,比如打印日志 System.err.println("无效的坐标数值: " + coord); } } else { System.err.println("格式错误的坐标字符串: " + coord); } } // 输出结果验证 System.out.println("经度列表: " + longitudes); System.out.println("纬度列表: " + latitudes); } }
简洁写法(Java 8+ 流式API)
如果使用Java 8及以上版本,可以用流式API简化代码:
// 基于流式API的处理逻辑 rawCoordinates.stream() .map(coord -> coord.split("\\s+")) // 拆分坐标字符串 .filter(parts -> parts.length == 2) // 过滤格式正确的元素 .forEach(parts -> { try { longitudes.add(Double.parseDouble(parts[0])); latitudes.add(Double.parseDouble(parts[1])); } catch (NumberFormatException e) { System.err.println("数值解析失败: " + String.join(" ", parts)); } });
关键要点
- 遍历方式:使用增强for循环(或流式API)可以简洁地遍历原列表的每个元素。
- 拆分规则:
split(" ")适用于单个空格分隔的场景;若坐标字符串可能包含多个连续空格、制表符,建议用split("\\s+")匹配任意空白字符,兼容性更强。 - 异常处理:添加格式校验和
try-catch块,避免因脏数据(比如格式错误、非数值内容)导致程序崩溃。 - 类型选择:将拆分后的字符串转为
Double类型,方便后续的地理计算;如果仅需存储字符串,直接添加splitResult[0]和splitResult[1]即可。
内容的提问来源于stack exchange,提问作者theking41
相关产品推荐
相关产品推荐

