日期:2014-05-20 浏览次数:20818 次
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写了一个,供参考。要求字符串第一个字符不是"“",引号要成对出现。
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; } }
------解决方案--------------------
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); }