zoukankan      html  css  js  c++  java
  • 逗号分割符--字段中含逗号等情况的解析方法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 = 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% 原创,如有分享请注明出处,谢谢。

    
    
  • 相关阅读:
    2015.2.27 UltraEdit中显示XML结构
    2015.1.31 DataGridView自动滚动到某行
    2015.1.15 利用函数实现将一行记录拆分成多行记录 (多年想要的效果)
    2015.1.15 利用Oracle函数返回表结果 重大技术进步!
    2015.1.15 利用Oracle函数插入表结构 Bulk collect into 不用循环,简洁高效
    2015.1.8 Left join 左连接
    2015.1.10 解决DataGridView SelectionChanged事件自动触发问题
    delphi 遍历窗口
    delphi 访问 protected 属性 哈哈
    clientdataset 读取excel 如果excel 文件不存在的时候 相应的gird 会不显示数据, 鼠标掠过 gird 格子 才会显示数据。 这是一个bug 哈哈
  • 原文地址:https://www.cnblogs.com/hsuchan/p/4135040.html
Copyright © 2011-2022 走看看