读取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