You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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());
        }
    }
}

代码说明

  1. try-with-resources:自动管理BufferedReader的关闭,无需在finally里手动处理,代码更简洁安全。
  2. 遍历坐标对:用增强for循环遍历每行拆分后的所有坐标对,确保不会漏掉任何数据。
  3. 鲁棒的拆分逻辑:先用trim()去掉坐标对前后的空格,再用split("\\s+")匹配任意数量的空白字符(包括多个空格、制表符),避免因格式不规范导致的拆分错误。
  4. 格式校验:添加了lonLat.length == 2的判断,避免因无效坐标格式导致数组越界异常,同时打印错误提示方便排查。

内容的提问来源于stack exchange,提问作者theking41

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:16:28