逗号分割符--字段中含逗号等情况的解析⽅法Java实现
  最近在处理⽂本字符串时,没⼀⾏数据都是按照逗号分割的,每个字段值⼀般情况是带有双引号的,但是有的字段值⾥⾯还包含逗号,甚⾄有的字段就没有双引号,这个分割起来就有点⿇烦了  下⾯说⼀下我解决⽅法,如果谁有更好的⽅法,欢迎加⼊讨论O(∩_∩)O~
/**
* Java字符串逗号分割解析⽅法
* 本专门针对双引号中还有逗号或者某个字段⽆双引号的情况⽽设计的
* 例如要将字符串String sss="101,\"a\",\"中国,江苏\",\"b\",\"中国,北京\",1,0,\"c\""按照逗号进⾏分割解析
* 正确的split的结果是(101)(a)(中国,江苏)( b)(中国,北京)( 1)( 0)( c)
* 如果⽤java的split⽅法的话,当遇到(中国,北京)这些字段值时就会多分割了⼀个字段出来,就不正确了
   * 同时,上⾯的101 ,1,0都不带要双引号,我们期望的理想字符串当然都是带双引号的字段值组成的字符串了
逗号分割字符串转数组
* 但是发⽣上⾯的情况时我们感觉很恼⽕,以上就是本⽅法设计的初衷,其实这⽅法是⼤学课本数据结构中的提到的,
* 在此⽤Java实现了⼀下,但是⽅法执⾏的效率我还没有测试
* @author HsuChan
* @version 2014-11-30 22:30
* @param sss
* @return String []
*/
public String [] commaDivider(String sss){
//双引号开始标记
int qutationStart =0;
//双引号结束标记
int qutationEnd =0;
char[] charStr = CharArray();
//⽤于拼接字符作为⼀个字段值
StringBuffer sbf = new StringBuffer();
//结果list
List<String> list = new ArrayList<String>();
//逐个字符处理
for(int i=0;i<charStr.length;i++) {
//在此之前还未遇到双引号并且当前的字符为\"
if(qutationStart == 0&&charStr[i] == '\"') {
qutationStart = 1;
qutationEnd = 0;
continue;
} else if(qutationStart == 1&&charStr[i] == '\"'){
//在此之前遇到了双引号并且当前的字符为\" 说明字段拼接该结束了
qutationStart = 0;
qutationEnd = 1;
//当最后⼀个字符是双引号时,由于下次循环不会执⾏,所以在此保存⼀下
if(i == charStr.length-1&&sbf.length() != 0) {
list.String());
sbf.setLength(0);
}
continue;
} else if(qutationStart == 1&&charStr[i] == ','&&qutationEnd == 0) {
//处理 \"中国,北京\"这种不规范的字符串
sbf.append(charStr[i]);
continue;
} else if(charStr[i] == ',') {
  //字段结束,将拼接好的字段值存到list中
list.String());
sbf.setLength(0);
continue;
}
/
/不属于分隔符的就拼接
sbf.append(charStr[i]);
if(i == charStr.length-1&&sbf.length()!=0) {
list.String());
sbf.setLength(0);
}
}
return (String[])Array(new String[list.size()]);
}
本⽂属100% 原创,如有分享请注明出处,谢谢。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。