java中用遞歸的寫(xiě)法處理字符串,你會(huì)嗎?

如果你想循環(huán)解析一個(gè)字符串,一般你會(huì)怎么做,可能選擇的是正則去處理字符串,那么我將教你用堆棧的形式將符號(hào)提取出來(lái),進(jìn)行處理,以下是全部的代碼,大家可以CV下來(lái)自己跑一下(這個(gè)遞歸其實(shí)存在一定的問(wèn)題,只是為了幫助大家更好的理解遞歸的含義,對(duì)字符串的處理最好不要用遞歸來(lái)做)

??如果有什么地方不理解的,可以留言或者評(píng)論

有一個(gè)問(wèn)題,就是不能什么都用遞歸哦,下面整理幾個(gè)遞歸調(diào)用的條件

  • 大問(wèn)題能拆分等價(jià)于小問(wèn)題的循環(huán)重復(fù)(必須)
  • 有控制條件(稱(chēng)為出口)來(lái)斷開(kāi)自我調(diào)用,或者繼續(xù)自我調(diào)用,控制條件并不一定是簡(jiǎn)單的判斷語(yǔ)句,可以有多種情況或者多個(gè)條件(必須)
  • 一次自調(diào)用的結(jié)果,應(yīng)該是下一次調(diào)用的初始值
/**
 * @des 一般最好不要用遞歸,用遞歸的條件如下(要想好在寫(xiě))
 *      1.返回值必須是下次的調(diào)用值(如果是void則不需要)
 *      2.必須要有一個(gè)明確的結(jié)束條件
 *      3.遞歸過(guò)多導(dǎo)致棧溢出(棧幀里面套用棧幀,效率不高)
 * @author 719383495@qq.com
 * @date 2019/7/31 13:56
 */
package com.algorithm;

import org.apache.commons.collections.ArrayStack;

public class Recursive {

    private static StringBuffer sb = new StringBuffer();

    public static void main(String[] args) {

        String recursive = recursive("${}${{{}}}");
        System.out.println(recursive);
    }

    public static String recursive(String str) {

        char[] c = str.toCharArray();
        int len = c.length;
        boolean tag = false;
        int temp0 = 0;
        int temp1 = 0;
        ArrayStack stack = new ArrayStack();
        for (int i = 0; i < len; i++) {
            if (36 == c[i]) {
                tag = true;
                temp0 = i + 1;
            }
            if (tag == true) {
                if (123 == c[i]) {
                    stack.push(c[i]);
                }
                if (125 == c[i]) {
                    stack.pop();
                    temp1 = i;
                    if (stack.size() == 0) {
                        tag = false;
                        sb.append(String.valueOf(c, temp0, temp1 - temp0+1));
                        String newStr = String.valueOf(c, temp1 + 1, len - temp1 - 1);
                        if ("".equals(newStr)) {
                            return sb.toString();
                        } else {
                            return recursive(newStr);
                        }

                    }
                }

            }
        }
        return null;
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容