题目描述:
-A1: v1
B1: v2
C1: v3
C2: v4
-A2: v5
B2: v6
B3: v7
#
对于给定的类似于上面的数据,对其进行扁平化,得到类似于下面的数据
-A1: v1
-A1: v1-B1: v2
-A1: v1-B1: v2-C1: v3
-A1: v1-B1: v2-C2: v4
-A2: v5
-A2: v5-B2: v6
-A2: v5-B3: v7
#
代码
利用深度优先进行处理,先处理前面没有空格的数据,然后处理有4个空格的数据,再处理有8个空格的数据,重复下去直到所有的数据处理完毕。
import java.util.*;
public class Main{
public static List<String> sub = new ArrayList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s;
//按行输入数据并存入一个List中
List<String> list = new ArrayList<>();
while (!"#".equals(s = sc.nextLine())) {
list.add(s);
}
//扁平化
flat(list, 0, 0, list.size());
//输出结尾字符
System.out.println("#");
}
//num:代处理的数据前有几个空格,start:处理的开始下表,end:处理的结尾下标
public static void flat(List<String> list, int num, int start, int end) {
//在给定的范围内找到前面有num个空格的字符串
List<Integer> idx = new ArrayList<>();
for(int i = start; i < end; i++) {
if(count(list.get(i)) == num){
idx.add(i);
}
}
//加入末尾
idx.add(end);
//处理给定的范围
for(int i = 1; i < idx.size(); i++) {
StringBuilder builder = new StringBuilder();
int len = list.get(idx.get(i - 1)).length();
//如果前面没有空格说明是第一层,不需要加"-"
if(num != 0)
sub.add("-" + list.get(idx.get(i - 1)).substring(num, len) );
else
sub.add(list.get(idx.get(i - 1)).substring(num, len));
for(int j = 0; j < sub.size(); j++){
builder.append(sub.get(j));
}
//打印
System.out.println(builder.toString());
//处理下一层
flat(list, num + 4, idx.get(i - 1) + 1, idx.get(i));
sub.remove(sub.size() - 1);
}
}
public static int count(String s) {
int num = 0;
while(s.charAt(num) == ' ') num++;
return num;
}
}