java split用法 案例

需求:java读取一个csv文件并将文件内容每行按照","隔开

场景一:

读取1.csv文件:文件内容如下:

1,zhangsan,note

2,lisi,

注意:第二行逗号后面没有数据

复制代码
public static void main(String[] args) {
        String csvFile = "C:\\Users\\yc\\Desktop\\1.csv";
        String line;
        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            // 读取CSV文件的每一行
            while ((line = br.readLine()) != null) {
                // 根据分隔符拆分行数据
                String[] data = line.split(",");
                // 打印行数据
                System.out.println("-----------长度:"+data.length);
                for(int i=0;i<data.length;i++){
                    System.out.println(data[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

输出结果:两行分割后数据长度不一样

如何让分割后的长度一样,避免下标溢出报错?修改代码,重点如下红色部分line.split(",",-1);加个-1

复制代码
public static void main(String[] args) {
        String csvFile = "C:\\Users\\yc\\Desktop\\1.csv";
        String line;
        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            // 读取CSV文件的每一行
            while ((line = br.readLine()) != null) {
                // 根据分隔符拆分行数据
                String[] data = line.split(",",-1);
                // 打印行数据
                System.out.println("-----------长度:"+data.length);
                for(int i=0;i<data.length;i++){
                    System.out.println(data[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

输出结果:长度一样了,第二行输出了一个空,如下图所示。

场景二:

读取2.csv文件:文件内容如下:

aaa,"[123213,123123]",bbbb

想分割成aaa,"[123213,123123]"和bbbb

上代码如下:

复制代码
 public static void main(String[] args) {
        String csvFile = "C:\\Users\\yc\\Desktop\\2.csv";
        String line;
        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            // 读取CSV文件的每一行
            while ((line = br.readLine()) != null) {
                // 根据分隔符拆分行数据
                String[] data = line.split(",",-1);
                // 打印行数据
                System.out.println("-----------长度:"+data.length);
                for(int i=0;i<data.length;i++){
                    System.out.println(data[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

输出结果:事与愿违并没有出处想要的结果

修改代码:

复制代码
public static void main(String[] args) {
        String csvFile = "C:\\Users\\yc\\Desktop\\2.csv";
        String line;
        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            // 读取CSV文件的每一行
            while ((line = br.readLine()) != null) {
                // 根据分隔符拆分行数据
                List<String> data = splitString(line);
                // 打印行数据
                System.out.println("-----------长度:"+data.size());
                for(int i=0;i<data.size();i++){
                    System.out.println(data.get(i));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static List<String> splitString(String text) {
        List<String> result = new ArrayList<>();
        boolean inQuotes = false;
        StringBuilder sb = new StringBuilder();

        for (char c : text.toCharArray()) {
            if (c == '\"') {
                inQuotes = !inQuotes;
                sb.append(c);
            } else if (c == ',' && !inQuotes) {
                result.add(sb.toString());
                sb.setLength(0);
            } else {
                sb.append(c);
            }
        }
        result.add(sb.toString());

        return result;
    }

输出结果:得到了想要的结果

相关推荐
Wyc724091 分钟前
SpringBoot
java·spring boot·spring
Bella_chene3 分钟前
IDEA中无法使用JSP内置对象
java·servlet·intellij-idea·jsp
凯基迪科技1 小时前
exe软件壳的分类----加密保护壳
java
wuxuanok1 小时前
Web后端开发-分层解耦
java·笔记·后端·学习
kyle~2 小时前
C/C++字面量
java·c语言·c++
neoooo2 小时前
别慌,Java只有值传递——一次搞懂“为啥我改了它还不变”!
java·后端·spring
秋难降2 小时前
Python 知识 “八股”:给有 C 和 Java 基础的你😁😁😁
java·python·c
wuxuanok2 小时前
Web后端开发-请求响应
java·开发语言·笔记·学习
livemetee2 小时前
spring-ai 1.0.0 (3)交互增强:Advisor 顾问模块
java
DDDDDouble2 小时前
<二>Sping-AI alibaba 入门-记忆聊天及持久化
java·人工智能