首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

字符串中按逗号解析时候遇到的有关问题

2012-09-14 
字符串中按逗号解析时候遇到的问题我想解析一串字符串:12,13,“14,15”,16,17,“18,19,20”,21这串字符串要求

字符串中按逗号解析时候遇到的问题
我想解析一串字符串:12,13,“14,15”,16,17,“18,19,20”,21 这串字符串要求是按都好解析的,但是双引号中也有,这样就导致双引号中解析出来的字符串不是完整的,如果用split(",")去解析,解析结果为:
12
13
“14
15”
16
17
“18
19
20”
21
但这不是我想要的,我想要的是:
12
13
14,15
16
17
18,19,20
21
关键是碰到双引号中的逗号怎么处理?
希望各位大大能帮忙解决下,小弟非常感谢!!!

[解决办法]
从楼主你想要的结果来看,应该是有两种处理方式,一种是在截取逗号的时候进行判断,然后直接截出来,另外一种就是先全按逗号截出来之后,再把引号的部分拼接起来,不知道楼主你想用什么形式的
自己做了一个截取时处理的。做的不好,仅供楼主参考吧

Java code
public class TestSplit {    public static void main(String[] args) {        String str = "12,13,\"14,15\",16,17,\"18,19,20\",21";        ArrayList<String> list = new ArrayList<String>();        String[] str_split1 = str.split(",");        for (int i = 0; i < str_split1.length; i++) {            if (str_split1[i].indexOf("\"") == -1)                list.add(str_split1[i]);            else {                String str_split2 = str_split1[i]+",";                int j;                for (j = i + 1; str_split1[j].indexOf("\"") == -1; j++) {                    str_split2 += str_split1[j]+",";                }                str_split2 += str_split1[j];                str_split2=str_split2.replaceAll("\"", "");                list.add(str_split2);                i = j;            }        }        for (String s : list) {            System.out.println(s);        }    }}
[解决办法]
我用 StringTokenizer写了一个,供参考。要求字符串第一个字符不是"“",引号要成对出现。

Java code
import java.util.StringTokenizer;public class ResolvingString{    public static void main(String[] args)    {        ResolvingString rs=new ResolvingString();        String originalString1="12,13,“14,15”,16,17,“18,19,20”,21";        String[] result=rs.resolving(originalString1);            //调用方法处理字符串.        for(String s:result)                        //显示结果.        {            System.out.println(s+"\t");        }    }    //解析字符串,结果以字符串数组形式返回。要求字符串第一个字符不是"“",引号要成对出现。    //    public String[] resolving(String str)    {        int i=0;        String[] result=new String[str.length()];        //定义足够长的数组,存放由"“"和"”"分割的字符串。        String[] result1=new String[str.length()];        //存放处理了由",”分割的字符串和由“”引起来的字符串。        //先按"”“"分割字符串。        StringTokenizer st=new StringTokenizer(str,"“”");        while(st.hasMoreTokens())        {            result[i++]=st.nextToken();        }        int length=i;                        //有几个字符串。        int position=0;        //把非引号部分按","分割。        for(int j=0;j<length;j+=2)        {            String[] temp=result[j].split(",");            int nonNullPosition=(temp.length>1&&temp[0].equals(""))?1:0;            System.arraycopy(temp,nonNullPosition,result1,position,                    temp.length-nonNullPosition);            position+=temp.length-nonNullPosition;            if(j+1<length)            {                result1[position]=result[j+1];        //引号部分直接放入数组。                position++;            }        }        String[] last=new String[position];            //存放最终结果数组。        System.arraycopy(result1,0,last,0,position);        return last;    }}
[解决办法]
Java code
String str = "12,13,\"14,15\",16,17,\"18,19,20\",21";        System.out.println(str);        String[] arr = str.split("(\")|(,\")");        List<String> list = new ArrayList<String>();        for(int i=0;i< arr.length-1;i++){            if(!arr[i+1].startsWith(",")){                list.addAll(Arrays.asList(arr[i].replaceFirst("^,", "").split(",")));            }else{                list.add(arr[i]);            }        }        list.add(arr[arr.length-1].replaceFirst(",", ""));        for(String s :list){            System.out.println(s);        } 

热点排行