刚刚遇到一个需求,需要转义字符,比较有意思:
接收一段字符串
eg1:
“中文,Chaina\,\,\,\,,哈哈”
eg2:“aa,aa\\,bb,cc\\\\,dd,6,hh
”
根据“,”分隔字符串,但是含有转义字符“\”的,不用分隔,去掉转义字符“\”
String[] array =new String[“中文”,”Chaina,,,, “,”哈哈” ];(像这样)
个人思路:(PS:欢迎指导新的思路)
首先通过String.split(”,”)截取成数组。
然后数组转成Arraylist(PS:数组不能直接删)
然后判断如果list.(position)中存在”\”时,将其替换成”,”
然后将position和position+1合成新的position,
然后将position+1这个remove()掉。
于是想到了递归,发现for()循环太麻烦了
private List<String> Change(List<String> alist){
for(int i = 0 ; i < alist.size() ; i++){
if(alist.get(i).contains("\\")){
String tt = alist.get(i).replace("\\",",");
alist.set(i,tt+alist.get(i+1));
alist.remove(i+1);
return Change(alist);
}
}
return alist;
}
ps:上面代码还是有的小问题,eg2就出了问题,所以一个一个解析来吧)
不解释,来波新的:
//如果第一个字符是","去掉","(递归)
private String isC(String string) { //判断第一个字符是否为 ,
String six = string;
for (int i = 0; i < six.length(); i++) {
if (six.charAt(0) == 44) {
six = six.substring(1, six.length());
return isC(six);
}
}
return six;
}
List<String> list = new ArrayList<String>();
private void Six(String star) {
String cut = "";
char[] ar = new char[star.length()];
for (int i = 0; i < star.length(); i++) {
ar[i] = star.charAt(i);
}
for (int i = 0; i < ar.length; i++) {
if (ar[i] == 44 && ar[i - 1] == 92) {
cut = cut.substring(0, cut.length() - 1);
cut += String.valueOf(ar[i]);
} else if (ar[i] == 44) {
int num = list.size();
list.add(num, cut);
cut = "";
} else {
cut += String.valueOf(ar[i]);
if (i == ar.length - 1) {
int num = list.size();
list.add(num, cut);
cut = "";
}
}
}
}