最近在处理文本字符串时,没一行数据都是按照逗号分割的,每个字段值一般情况是带有双引号的,但是有的字段值里面还包含逗号,甚至有的字段就没有双引号,这个分割起来就有点麻烦了
  下面说一下我解决方法,如果谁有更好的方法,欢迎加入讨论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 = sss.toCharArray();
//用于拼接字符 作为一个字段值
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.add(sbf.toString());
sbf.setLength(0);
}
continue;
} else if(qutationStart == 1&&charStr[i] == ','&&qutationEnd == 0) {
//处理 \"中国,北京\"这种不规范的字符串
sbf.append(charStr[i]);
continue;
} else if(charStr[i] == ',') {
  //字段结束,将拼接好的字段值存到list中
list.add(sbf.toString());
sbf.setLength(0);
continue;
}
//不属于分隔符的就拼接
sbf.append(charStr[i]);
if(i == charStr.length-1&&sbf.length()!=0) {
list.add(sbf.toString());
sbf.setLength(0);
} } return (String[])list.toArray(new String[list.size()]);
}

本文属100% 原创,如有分享请注明出处,谢谢。

												

最新文章

  1. Eclipse中修改Web项目的URL访问路径
  2. jq实现点击弹出框代码
  3. (转)UIColor 的使用
  4. 《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制
  5. ubuntu 下编译内核
  6. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
  7. win32使用ATL显示C#COM窗体
  8. The Suspects(并查集维护根节点信息)
  9. Android锁屏状态下弹出activity
  10. 笔记:Hibernate 查询缓存
  11. 有效使用django的queset
  12. 【转载】springboot四 全局异常处理
  13. PC滚动条样式
  14. 剖析 Linux hypervisor
  15. PHP中MySQL、MySQLi和PDO的用法和区别
  16. 在不进入Guest OS的情况下,取得Guest OS的IP地址
  17. Android---------------解决bug的关键点
  18. AngularJs -- 指令简介
  19. j.u.c系列(05)---之重入锁:ReentrantLock
  20. 完整的REM布局的工作流程与规范

热门文章

  1. JavaScript 中对内存的一些了解
  2. ruby
  3. Kafka实战-Flume到Kafka
  4. mysql-5.7日志设置
  5. JQuery事件之鼠标事件
  6. Linux下百度云盘报 获取bdstoken失败
  7. NoClassDefFoundError vs ClassNotFoundException
  8. PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
  9. C++文件读写详解
  10. Android 图片滤镜工具——高斯模糊