java split用法 案例

news/2024/9/22 20:32:50

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

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

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31370.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

UploadLabs靶场

UploadLabs关卡解析与过关思路。目录Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20都是鄙人做题思路记下来的一些心得笔记罢了。Pass-01 先传一个图片过去,成功上传。尝试…

java split用法

需求:java读取一个csv文件并将文件内容每行按照","隔开 场景一: 读取1.csv文件:文件内容如下: 1,zhangsan,note2,lisi, 注意:第二行逗号后面没有数据public static void main(String[] args) {String csvFile = "C:\\Users\\yc\\Desktop\\1.csv";Stri…

J. 上学

原题链接 题解 看清楚题目,是三个人都坐在同一辆校车!!code #include<bits/stdc++.h> #define ll long long using namespace std; vector<ll> G[200005]; ll depth[200005]={0}; void dfs(ll now,ll fa) {for(auto next:G[now]){if(next==fa) continue;depth[n…

第 2篇 Scrum 冲刺博客

这个作业属于哪个课程 软件工程2024这个作业要求在哪里 团队作业4——项目冲刺这个作业的目标 记录敏捷流程下第二天的项目开发进展,对团队昨天的工作进行总结一、每日站立式会议 1、每日站立式会议照片2、会议摘要本次会议为第二次Scrum Meeting会议~ 由于本次会议队长召开时…

D. 方块游戏

原题链接 题解 太巧妙了!!!code #include<bits/stdc++.h> using namespace std; int main() {int n,m;cin>>n>>m; int r=0,b=0,y=0;for(int i=1;i<=n;i++){string s;cin>>s;for(int j=0;s[j];j++){if(s[j]==1) r++;else if(s[j]==2) b++;…

面向金融市场的人工智能-多模型方法-全-

面向金融市场的人工智能:多模型方法(全)原文:zh.annas-archive.org/md5/0aabc8078dabbde7af4df5aa9d55c374 译者:飞龙 协议:CC BY-NC-SA 4.0前言 本书介绍了一种利用非线性性进行金融投资的可行方法。它总结了 Raphael Douady 和合作者们近二十年来进行的研究。这项研究由…

计算机网络常见面试题总结(上)

计算机网络常见面试题总结(上) OSI七层模型 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。每一层都为上一层提供服务 TCP/IP四层模型 应用层,传输层,网络层,网络接口层,各层相互独立,为上层提供服务 常见的网络协议 应用层:HTTP,超文本传输协议,浏览…

一次性临时gmail邮箱 API免费调用

iDataRiver平台 https://idatariver.com 提供免费的临时邮箱API, 可自动获取随机邮件内容如果你不想在某些平台注册时使用自己的邮箱,可以使用iDataRiver平台 提供的一次性匿名邮箱API,可每次随机获取一个临时邮箱,支持gmail,重点是免费使用。 临时邮箱API文档 https://…