读取CSV数据的集中方式(Java和Oracle)

CSV数据是一种类似于execl的数据格式,当CSV格式转化为文本格式时,数据会自动使用逗号(,)隔开,但是如果CSV单元格中同时含有逗号,文本格式会用加 “” 的方式予以区分。

在我们处理只有逗号的文本时,比较简单。当我们处理文本中含有 “” 的逗号时,容易和文本自动添加的逗号混淆,比较困难处理,因此要借助正则表达式来进行处理区分。

今天对于读取CSV数据的方式做了深入的调查,特在此做一下总结。

目前本人接触CSV的读取方式可以分为两种,一种为JAVA代码的方式,一种为Oracle的读取方式

1.JAVA代码的读取方式一般使用split方法

a.文本中只有逗号

例:"123","Jack jona","Computer science"

则直接可以使用

String[] strArr = str.trim().split(",",-1);

进行分割处理。

b.如果文本中在 “” 中含有逗号

例:"234", "Lee Jack", "Fort myers, FL"

则需要借助正则表达式来进行区分

String[] strArr = str.trim().split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)",-1); //双引号内的逗号不分割 

2,Oracle的读取方式

由于Oracle的正则表达式和JAVA中的正则表达式不同,java中的正则表达式支持正向预测,Oracle的正则中只是支持正声明。

简单的来讲,java中的正则表达式和split结合可以读取符合一段正则规则的字符串(例如 规则为-> ," ")

而Oracle中的拆分字符串的方法为Regexp_Substr函数,在这里需要说明的是Oracle的截取方式为逐个匹配方式,也就是Oracle会遍历字符串的中的每一个字符 ,像是砍断一样将字符串砍断截取。

所以目前来说,Oracle的处理csv的方式并没有java方便。

此为个人见解,如果疑问可以加我讨论。810632986

原文地址:https://www.cnblogs.com/trylearnIT/p/8028100.html