首页 > 编程语言 >java split用法

java split用法

时间:2024-05-14 12:51:50浏览次数:16  
标签:java String csvFile 用法 BufferedReader split br new line

需求: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;
    }

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

 


 

标签:java,String,csvFile,用法,BufferedReader,split,br,new,line
From: https://www.cnblogs.com/yclh/p/18191095

相关文章

  • java测试-Xpath定位
     Xpath定位调式方法console方式:$x("xpath表达式")xpath基础语法1、/从该节点的子元素选取2、//从该节点的子孙元素选取$x('//*')匹配所有3、*通配符查找所有4、nodename标签名(不是属性)$x('//input')5、..当前节点的父节点$x("//*[@id='ember61'......
  • 一道需要仔细看的java面试题
    publicstaticvoidmain(String[]args){ Map<String,Object>resultMap=newHashMap<String,Object>(); Stringstr=MapUtil.getStr(resultMap,"yyyy"); System.out.println("++"+str); System.out.println(&......
  • 类函数,=>,->,::,self,$this用法
    <?php//比较最大数值classMath{publicstaticfunctionMax($num1,$num2){return$num1>$num2?$num1:$num2;}}$a=1000;$b=5000;echo"显示$a和$b中的最大值是";echoMath::Max($a,$b);//返回5000......
  • java与AI
    为什么Java是AI领域的理想选择?机器学习已成为当今技术领域的重要组成部分,使计算机能够从数据中学习并随着时间的推移提高其性能。随着大数据的爆炸式增长和自动化需求的不断增加,机器学习已成为许多行业不可或缺的工具,包括金融、医疗保健、电子商务等。Java在支持AI应用程序......
  • redis学习笔记4: 在Java中操作Redis
    redis学习笔记4:在Java中操作RedisRedis的Java客户端Jedis[命令和原生Redis基本相同]Lettuce[性能高效]SpringDateRedis[可以在Spring项目中使用,简化操作]SpringDateRedis使用方式导入maven坐标<!--https://mvnrepository.com/artifact/org.springfra......
  • Java开发微服务SpringCloudAlibaba+Nginx+Vue+Mysql+RabbitMQ
    项目介绍随着互联网技术的飞速发展和移动设备的普及,自媒体平台已经成为人们获取信息、传播观点、实现自我价值的重要途径。自媒体平台的设计与实现,不仅需要考虑如何提供便捷的内容发布、编辑和管理功能,还需要考虑如何构建健康的内容生态,保证信息的真实性和可靠性,防止虚假信息的传......
  • ZonedDateTime 转为 java.util.Date
    publicstaticvoidmain(String[]args){//1、使用ZoneId定义美国时区ZoneIdzoneId=ZoneId.of("America/New_York");//2、获取当前时间ZonedDateTimenow=ZonedDateTime.now();//3、将当前时间转换为美国时间Z......
  • java内部类
    1内部类1.1概述●内部类就是定义在一个类里面的类。内部内(寄生),外部内(宿主)1.2使用场景●内部的完整结构只为外部事务提供服务,那么内部的完整结构可以使用内部类来设计●内部类通常可以方便访问外部类的成员,包括私有成员●内部类提供了更好的封装性,可用private,protect......
  • Java8新特性
    1Lambda表达式1.1使用Lambda表达式实现函数式接口1【案例1】函数是接口MyInterOne//函数式接口(接口中只有一个抽象方法)@FunctionalInterfacepublicinterfaceMyInterOne{publicabstractvoidmethodOne();}【案例2】定义MyInterOneImpl类实现接口MyInterOnepub......
  • java的图像处理 java图像处理为什么耗cpu
    CPU:有的应用需要大量计算,他们会长时间、不间断地占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题。例如:代码递归导致的无限循环,正则表达式引起的回溯,JVM频繁的FULLGC,以及多线程编程造成的大量上下文切换等,这些都有可能导致CPU资源繁忙。内存:Java程......