文字列を解析するための再帰的な方法

ジョン・ドウ:

私は、文字列 "{X} {Y {{B {C} {D}}}}" を持ち、再帰的にプリントアウトしたいです。

x
-y
-a
--b
---c
---d

これは私がこれまで持っているものです -

private static void printPathInChild2(String path) {

        if (path.length() == 0) {
            return;
        }
        if (path.charAt(0) == '{') {
            for (int i = 0; i < path.length(); i++) {
                if (path.charAt(i) == '{' && i != 0) {
                    String t1 = path.substring(0,i);
                    System.out.println(t1);
                    printPathInChild2(path.substring(i));
                } else if (path.charAt(i) == '}') {
                    String t2 = path.substring(0, i+1);
                    System.out.println(t2);
                    printPathInChild2(path.substring(i+1));
                }
            }
        }
    }

終了ロジックに苦しんで

彼らは次のとおりでした:

あなたが追加したい場合は「 - 」「 - 」文字のネストの深さに依存文字を、あなたはの接頭辞を追跡再帰呼び出し、二番目の引数を渡す必要があります。

あなたが遭遇すると「{」、あなたは追加「 - 」接頭辞に。

あなたが遭遇すると「}」は、削除「 - 」接頭辞から。

あなたが他の文字に遭遇したときは、その文字が続くプレフィックスを印刷します。

private static void printPathInChild2(String path,String prefix) {
    if (path.length() == 0) {
        return;
    }
    if (path.charAt(0) == '{') {
      printPathInChild2(path.substring(1),prefix + "-");
    } else if (path.charAt(0) == '}') {
      printPathInChild2(path.substring(1),prefix.substring(0,prefix.length()-1));
    } else {
      System.out.println (prefix.substring(1) + path.charAt(0));
      printPathInChild2(path.substring(1),prefix);
    }
}

ときにあなたがして、このメソッドを呼び出します。

printPathInChild2("{x{y}{a{b{c}{d}}}}","");

あなたが得ます:

x
-y
-a
--b
---c
---d

(-'s私はあなたの期待出力「D」に4を持っていることを見る「-'s、私は以来、それは、誤りだと思う 『dはC』と同じ入れ子のレベルを持っている 『』それは3を持っている必要がありますので、」)。

次のような方法も書くことができます。

private static void printPathInChild2(String path,String prefix) {
    if (path.length() == 0) {
        return;
    }
    char c = path.charAt(0);
    if (c == '{') {
      prefix = prefix + '-';
    } else if (c == '}') {
      prefix = prefix.substring(0,prefix.length()-1);
    } else {
      System.out.println (prefix.substring(1) + c);
    }
    printPathInChild2(path.substring(1),prefix);
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=363364&siteId=1