Если вы хотите добавить символы «-», которые зависят от глубины вложения, вы должны передать второй аргумент рекурсивному вызову, который отслеживает префикс символов «-».
Когда вы встречаете «{», вы добавляете «-» к префиксу.
Когда вы встречаете «}», вы удаляете «-» из префикса.
Когда вы встречая любой другой символ, вы печатаете префикс, за которым следует этот символ.
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
(Я вижу, что в вашем ожидаемом выводе 'd' имеет 4 ', но я думаю, что это ошибка, поскольку' d 'имеет тот же уровень вложенности, что и' c ', поэтому он должен иметь 3' - ' s).
Метод также можно записать следующим образом:
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);
}