日期:2014-05-20 浏览次数:21013 次
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);
}