Java不规则字符串按照逗号分割的解析方法(字段中又含有逗号)

/**
     * Java字符串逗号分割解析方法
     * 本专门针对双引号中还有逗号或者某个字段无双引号的情况而设计的
     * 例如要将 字符串 String sss="101,\"a\",\"中国,江苏\",\"b\",\"中国,北京\",1,0,\"c\""按照逗号进行分割解析;
     * 正确的split的结果是 (101)(a)( 中国,江苏) ( b)( 中国,北京) ( 1)( 0)( c)
     * 如果用java的split方法的话,当遇到(中国,北京)这些字段值时就会多分割了一个字段出来,就不正确了,同时,上面的101 ,1,0都不带要双引号
     * 我们期望的理想字符串当然都是带双引号的字段值组成的字符串了,但是发生上面的情况时我们感觉很恼火
     * 以上就是本方法设计的初衷,其实这方法是大学课本数据结构中的提到的,在此用Java实现了一下,但是方法执行的效率我还没有测试
     * 如果谁有更好的方法欢迎加入讨论O(∩_∩)O~
     * @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()]);
    }
时间: 2024-08-06 07:55:53

Java不规则字符串按照逗号分割的解析方法(字段中又含有逗号)的相关文章

oralce逗号分割变多行 Oracle中REGEXP SUBSTR函数

Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcstr     :需要进行正则处理的字符串 __pattern    :进行匹配的正则表

Java实现字符串倒序输出的几种方法

1. 最容易想到的估计就是利用String类的toCharArray(),再倒序输出数组的方法了. import javax.swing.JOptionPane; public class ReverseString { public static void main (String args[]){ String originalString; String resultString = ""; originalString = JOptionPane.showInputDialog

逗号分割符--字段中含逗号等情况的解析方法Java实现

最近在处理文本字符串时,没一行数据都是按照逗号分割的,每个字段值一般情况是带有双引号的,但是有的字段值里面还包含逗号,甚至有的字段就没有双引号,这个分割起来就有点麻烦了 下面说一下我解决方法,如果谁有更好的方法,欢迎加入讨论O(∩_∩)O~ /** * Java字符串逗号分割解析方法 * 本专门针对双引号中还有逗号或者某个字段无双引号的情况而设计的 * 例如要将字符串String sss="101,\"a\",\"中国,江苏\",\"b\&quo

Java连接MySQL数据库增删改查通用方法

Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的. 我在之前写过一篇普通的Java连接MySQL数据库,大家可以看看,以便对比参考之后就知道差距了  数据库--MySQL-->Java篇 接下来我给大家讲讲如何将

java jdk1.7后 sting intern()方法与之前的区别

public static void main(String[] args) { String s1 = new StringBuilder("计算机").append("软件").toString();//在堆中 System.out.println(s1.intern()==s1);// intern返回的值 指向堆中”计算机软件的引用" 与s1指向相同的一块堆内存,相同,返回true String d= "class";//在方法

Loadrunner参数化逗号报错解决方法

Loadrunner参数化逗号报错解决方法 介绍Loadrunner参数化时,参数中包含有逗号时出错的解决方法. 在Loadrunner进行参数化时,参数中如果含有逗号,编辑保存后会报错: 此时对英文逗号进行转义即可正常进行参数化: 参数化方法即添加双引号进行转义: 如123456abc","即表示参数123456abc,

Java将一段逗号分割的字符串转换成一个数组

String 类:String 类代表字符串.Java 程序中的所有字符串字面值都作为此类的实例实现.字符串是常量,它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String 对象是不可变的,所以 可以共享.String 类包括的方法可用于检查序列的单个字符.比较字符串.搜索字符串.提取子字符串.创建字符串副本并将所有字符全部转换为大写或小写.Java 语言提供对字符串串联符号("+")以及将其他 对象转换为字符串的特殊支持.字符串串联是通过 StringBuilde

【字符串】面试题之以逗号分割字符串,形成二维数组

题目: 有一个字符串符合以下特征("abcdef,acccd,eeee,aaaa,e3eeeee,sssss,"), 要求写一个函数(接口),输出以下结果 1) 以逗号分割字符串,形成二维数组,并把结果传出: 2) 把二维数组行数运算结果也传出. 请自己定义一个接口(函数). 要求1:能正确表达功能的要求,定义出接口(函数)(30分): 要求2:正确实现接口(函数),并实现功能(40分): 要求3:编写正确的测试用例.(30分). //头文件 #include <stdio.h&

Java用split函数进行分割字符串

在java中,我们常常需要对字符串进行分割,使用split方法把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项: public class StringSplit { public static void main(String[] args) { String sourceStr = "1,2,3,4,5"; String[] sourceStrArray = sourceStr.split(","); fo