홍길동 :
내가 문자열이 "{X {Y}를 {A {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);
}