根据文章目录简单生成目录层级码
类似于上图所示目录,生成层级码
得到如图所示类似的结果
方式一:递归方式
public class RankTest {
static Integer a =0;
static List strs = new ArrayList<>();
public static void main(String[] args) {
List kk = new ArrayList();
kk.add(“1计算机组成”);
kk.add(“2计算机原理”);
kk.add(“2.1计算原理”);
kk.add(“2.1.1二进制计算”);
kk.add(“2.1.1.1二进制计算原理”);
kk.add(“3计算机应用”);
for (String string : kk) {
abc(string,0,new StringBuffer());
}
}
public static void abc(String str,int num,StringBuffer sb) {
if(strs.size()-1<num) {
strs.add(1);
}
if(str!=null && str.indexOf(".")!=-1) {
if(a==num) {
strs.set(a, strs.get(a)-1);
}
sb.append(strs.get(num)).append(".");
num++;
abc(str.substring(str.indexOf(".")+1,str.length()),num,sb);
}else {
if(num<a) {
strs.set(num, strs.get(num)+1);
}
for(int i = num+1;i<=a;i++) {
strs.set(i, 1);
}
sb.append(strs.get(num));
a = num;
strs.set(num, strs.get(num)+1);
System.out.println(sb);
}
}
}
以上方案如果出现跳号,则会出错误的层级,以下是理想状态结果
方式二:
static private List list = new ArrayList();
public static String runkNum(String str) {
int length = str.length();
if (str.contains("…")) {
length = str.indexOf("…");
}
str = str.substring(0, length);
String runknum = “”;
int pointnum = 0;
for (int i = 0; i < str.length(); i++) {
if (’.’ == (str.charAt(i))) {
pointnum++;
}
}
if (!str.contains(".")) {
if (list.size() == 0) {
list.add(1);
} else {
list = list.subList(0, 1);
list.set(0, list.get(0) + 1);
}
} else {
if (pointnum == list.size()) {
list.add(0);
list.set(pointnum, list.get(pointnum) + 1);
} else {
if (list.size() == 0) {
list.add(0);
}
list = list.subList(0, pointnum+1);
list.set(list.size() - 1, list.get(list.size() - 1) + 1);
}
}
for (int i = 0; i < list.size(); i++) {
int num = list.get(i);
if (i == list.size() - 1) {
runknum += num;
} else {
runknum += num + “.”;
}
}
return runknum;
}
以上方案如果出现跳号,则会出错误的层级,理想状态结果同上
以上方案不能找出父项,需要按照顺序进行,方案比较笨重,如果有好的方案欢迎一起交流