要实现,当逗号是在双引号里时就不分割,该如何实现? 例如字符串: 
  e23,"dfd,bnn",rty 分割后↓ 
  e23 
  dfd,bnn 
  rty

解决方案 »

  1.   

    我写了一段代码,你看看吧,希望能够对你有所帮助:String str = "e23,\"dfd,bnn\",rty " ;
    String str1, str2,str3;
    // TODO 自动生成方法存根 int index1=0 , index2=0 , index3=0 ;

    index1 = str.indexOf( "\"") ;
    index2 = str.lastIndexOf( "\"" ) ;

    String subString = str.substring( index1+1 , index2) ;
    if( subString.indexOf( "," ) < 0  ) 
    System.out.println( ",不包含在\"\"中" );
    else {

      str1 = str.substring( 0 , index1-1 );
      str2 = subString ;
      str3 = str.substring( index2+2, str.length() -1) ;
      
      System.out.println( ",包含在\"\"中,截取为后为:");
      System.out.println( str1);
      System.out.println( str2);
      System.out.println( str3);输出结果:
    ,包含在""中,截取为后为:
    e23
    dfd,bnn
    rty
      

  2.   

    List saveList = new ArrayList();
    String str = "faf,e23,\"dfd,bnn\",\"adfasdf,rty\",afaf,\"fa,ad\",afasf";
    String[] strArray = str.split(",");
    for (int i = 0 ; i < strArray.length;) {
    if (strArray[i].startsWith("\"")&&strArray[i+1].endsWith("\"")) {
        saveList.add(strArray[i].substring(1) + "," + strArray[i+1].substring(0,strArray[i+1].length() - 1));
        i += 2;
        continue;
    }
    saveList.add(strArray[i]);
    i++;
    }
    for (int j = 0 ; j < saveList.size(); j++) {
    System.out.println(saveList.get(j));
    }
      

  3.   

    不好意思,俺的字符串本身不带斜线\是csv文本文件一行一行取出再分割。
      

  4.   


    上面多了个空格,在java中就无效了 
    String[] arr = str.split(",(?=\")|(?<=\"),");
      

  5.   


    说一点题外话,感觉你这个CSV文件出的不规范啊
    一般是
    "a","bcdf","regd"
    的形式吧,偶见得最多像LZ这样的格式,解析起来容易出错的如果是规范的CSV文件话
    用StringTokenizer类就可以很好的完成
      

  6.   

    也可以引入一个boolean对象初始为false,遇到单数个"就true,双数个"就赋值为false,
    当为true时不做任何操作,为false时则分开,比较麻烦,但是好操作
      

  7.   

    String[] arr = str.split(",(?=\")|(?<=\"),");上述语句执行的结果,只有双引号被分割,没有双引号就不行。不是俺要得结果!Help me!
      

  8.   

    处理这种问题,感觉用正则好一些
    package com.saturday.test;import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class StringSplit {
    public static void main(String[] args){
    String sInput="e23,\"dfd,bnn\",rty,我是谁?,\"电影,我是谁\"";
    String sReg="[^\\\",]+|\".*?\"";
    Pattern p=Pattern.compile(sReg,Pattern.DOTALL);
    Matcher m=p.matcher(sInput);

    while(m.find()){
    System.out.println(m.group());
    }
    }
    }
      

  9.   

    我个人觉得保险的方式到不一定非要用正则式,可以将.CSV文件用流的方式读出,再用流的方式写成.XLS文件,用读EXCEL表单元格的方式读内容,肯定不会出错,因为这个转换过程微软已经做的很好了,不管有没有""做分隔符,还是""中出现了,号或再出现""号,都已经处理过了,.XLS文件的单元格的内容就是.CSV文件中两个逗号之间的内容,如果单元格中出现了逗号,.CSV文件中出现逗号的内容会加双引号,而如果再出现一个双引号,会用两个双引号代替,以此类推,从.CSV文件还原回去也是一个逆向解析,个人感觉不管出现什么情况,应该都可以正确解析,如果非要自己写正则,值得再研究研究。
      

  10.   

    忘了去引号了
    package com.saturday.test;import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class StringSplit {
    public static void main(String[] args){
    String sInput="e23,\"dfd,bnn\",rty,我是谁?,\"电影,我是谁\"";
    String sReg="([^\\\",]+)|\"(.*?)\"";
    Pattern p=Pattern.compile(sReg,Pattern.DOTALL);
    Matcher m=p.matcher(sInput);

    while(m.find()){
    if(m.group(1)!=null)
    System.out.println(m.group(1));
    else
    System.out.println(m.group(2));
    }
    }
    }
      

  11.   


    简单的变通下:if(t.indexOf("\"")!=-1){
       //如果有双引号
       String[] arr = str.split(",(?=\")|(? <=\"),");
    }else{
        String[] arr = str.split(",");
    }
      

  12.   

    public void Stringstr() {
    String str = "e23,\"dfd,bnn\",rty";
    String s[] = str.split("\"");
    for (String m : s) {
    int x=m.indexOf(",");
    int y=m.lastIndexOf(",");
    if(x!=0){
    if(y!=-1&&m.length()-y==1){
    m=m.substring(0,y);
    }else{
    m=m.substring(0,m.length());
    }
    }else{
    if(y!=-1&&m.length()-y==1){
    m=m.substring(1,y);
    }else{
    m=m.substring(1,m.length());
    }
    }
    System.out.println(m);
    }
    }