Java实现将坐标CSV文件拆分至经度、纬度ArrayList
解决CSV坐标拆分:将坐标对分离为经度和纬度列表
你的代码里有几个明显的问题导致无法正确拆分经纬度,下面逐一说明并给出修正方案:
关键错误点
- 数组直接调用
split():threeLine是String[]类型,你直接对它调用split()方法,这是语法错误——数组没有这个方法,你需要遍历threeLine里的每个坐标字符串,再对单个坐标执行拆分。 - 集合类型不匹配:
coordsList1是ArrayList<String>,但你执行coordsList1.add(threeLine);,试图把String[]存入其中,编译阶段就会报错,应该逐个添加threeLine里的每个坐标字符串。 - 未遍历所有坐标对:每行拆分后得到的
threeLine数组可能包含多个坐标对,原代码没有遍历所有元素,只会处理第一个坐标对(甚至还没处理对),导致大部分数据丢失。
修正后的代码
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; public class CoordParser { public static void main(String[] args) { Path countyCoords = Paths.get("countyCoords.txt"); File coordsData = countyCoords.toFile(); ArrayList<String> coordsList1 = new ArrayList<>(); ArrayList<String> longitude = new ArrayList<>(); ArrayList<String> latitude = new ArrayList<>(); // 使用try-with-resources自动关闭流,避免手动关闭的繁琐 try (BufferedReader brCoords = new BufferedReader(new FileReader(coordsData))) { String lineReader; while ((lineReader = brCoords.readLine()) != null) { System.out.println("Coords: " + lineReader); // 按逗号拆分每行的所有坐标对 String[] coordPairs = lineReader.split(","); for (String pair : coordPairs) { // 按任意数量的空格拆分经纬度(处理可能的多空格或制表符) String[] lonLat = pair.trim().split("\\s+"); // 确保拆分后确实有两个值(避免格式错误导致数组越界) if (lonLat.length == 2) { coordsList1.add(pair.trim()); longitude.add(lonLat[0]); latitude.add(lonLat[1]); } else { System.err.println("无效的坐标格式:" + pair); } } } } catch (IOException ex) { System.err.println("读取文件错误: " + ex.getMessage()); } } }
代码说明
- try-with-resources:自动管理
BufferedReader的关闭,无需在finally里手动处理,代码更简洁安全。 - 遍历坐标对:用增强for循环遍历每行拆分后的所有坐标对,确保不会漏掉任何数据。
- 鲁棒的拆分逻辑:先用
trim()去掉坐标对前后的空格,再用split("\\s+")匹配任意数量的空白字符(包括多个空格、制表符),避免因格式不规范导致的拆分错误。 - 格式校验:添加了
lonLat.length == 2的判断,避免因无效坐标格式导致数组越界异常,同时打印错误提示方便排查。
内容的提问来源于stack exchange,提问作者theking41
相关产品推荐
相关产品推荐

