递归之初体验

刚刚遇到一个需求,需要转义字符,比较有意思:
接收一段字符串

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 = "";
                }
            }
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值