ジョン・ドウ:
私は、文字列 "{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);
}