当前位置: 首页 > news >正文

java读取csv文件或者java读取字符串,找出引号内容,采用正则表达式书写

  1. 将一个csv文件复制出来将后缀改变为txt,我们就得到了一个文件文件
  2. 打开这个txt文件,可以看到每一个字段之间都是用英文逗号隔开

正常的内容形似

20,C4,Pm,tem,tion,21,A4,E,H,"1,2,3,NA,aaa,bbbb,cccc,ddd,N/A,aaa,bbbb,cccc,ddd,tttttt

对于这种我们只需要进行简单的逗号分割就可以拿到每个字段的值

String input = "20,C4,Pm,tem,tion,21,A4,E,H,\"1,2,3,NA,aaa,bbbb,cccc,ddd,N/A,aaa,bbbb,cccc,ddd,tttttt";
String[] fields = input.split(",");
for (String field : fields) {System.out.println(field);
}

带引号的文本

当我们打开文件如果看到,文本中有的字段是双引号括起来的,里面也同样用逗号隔开,上面的方法便不再适用了,文本内容如下

20,C4,Pm,tem,tion,21,A4,E,H,"1,2,3",NA,"aaa,bbbb,cccc,ddd",N/A,"aaa,bbbb,cccc,ddd",tttttt

这里我们可以看到 "1,2,3" "aaa,bbbb,cccc,ddd" "aaa,bbbb,cccc,ddd" 这三组都是被引号括起来的
此时采用

public class CSVReader {public static void main(String[] args) {String csvFile = "path/to/your/csv/file.csv";String line = "";String csvSplitBy = ",(?=([^\"]*\"[^\"]*\")*[^\"]*$)";try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {while ((line = br.readLine()) != null) {String[] data = line.split(csvSplitBy);for (String datum : data) {System.out.print(datum + " ");}System.out.println();}} catch (IOException e) {e.printStackTrace();}}
}

解释如下:
这个正则表达式可以分为两部分:

  1. 逗号分隔符:,
  2. 前瞻语法:(?=([^\"]*\"[^\"]*\")*[^\"]*$)

前瞻语法是一种零宽度断言,它用于匹配一个位置,这个位置后面的文本符合某种模式。这个正则表达式中的前瞻语法表示:

  1. (?=...):表示正向前瞻,即匹配后面的文本必须符合括号中的模式。
  2. ([^\"]*\"[^\"]*\")*:表示匹配任意数量的双引号内的文本,其中:
  • [^\"]*:表示匹配任意数量的非双引号字符。
  • \"[^\"]*\":表示匹配一对双引号内的任意数量的非双引号字符。
  • (...)*:表示匹配任意数量的前面的模式。
  1. [^\"]*$:表示匹配任意数量的非双引号字符,直到字符串末尾。

综合起来,这个正则表达式的意思是:匹配逗号,并且这个逗号后面的文本必须符合以下模式:在这个逗号后面,如果有偶数个双引号,则这个逗号是字段分隔符;如果有奇数个双引号,则这个逗号是双引号内的文本,不是字段分隔符。这个正则表达式的作用是避免将双引号内的逗号误认为是字段分隔符。

http://www.lryc.cn/news/180864.html

相关文章:

  • 【寻找关键钥匙】python实现-附ChatGPT解析
  • 基于 QT 实现一个 Ikun 专属桌面宠物
  • 新闻报道的未来:自动化新闻生成与爬虫技术
  • C++ 并发编程实战 第八章 设计并发代码 二
  • list(链表)
  • 使用代理IP进行安全高效的竞争情报收集,为企业赢得竞争优势
  • 【数学知识】一些数学知识,以供学习
  • JKChangeCapture swift 版本的捕捉属性变化的工具
  • RISC-V 指令
  • [NOIP2011 提高组] 选择客栈
  • 桂院校园导航 静态项目 二次开发教程 1.2
  • private static final long serialVersionUID = 1L的作用是什么?
  • leetCode 122.买卖股票的最佳时机 II 贪心算法
  • 阿里云ACP知识点(三)
  • nmap 扫描内网IP, 系统, 端口
  • Llama2-Chinese项目:4-量化模型
  • 【深度学习实验】卷积神经网络(六):自定义卷积神经网络模型(VGG)实现图片多分类任务
  • Git/GitHub/Idea的搭配使用
  • Android的GNSS功能,搜索卫星数量、并获取每颗卫星的信噪比
  • 23-properties文件和xml文件以及dom4j的基本使用操作
  • 新型信息基础设施IP追溯:保护隐私与网络安全的平衡
  • django 实现:闭包表—树状结构
  • Redis与分布式-集群搭建
  • C++--位图和布隆过滤器
  • linux常识
  • Codeforces Round 901 (Div. 1) B. Jellyfish and Math(思维题/bfs)
  • unity 鼠标标记 左键长按生成标记右键长按清除标记,对象转化为子物体
  • 解决mac pro 连接4k显示器严重发烫、卡顿问题
  • QT的ui设计中改变样式表的用法
  • 零基础Linux_10(进程)进程终止(main函数的返回值)+进程等待