例如对这个字符串进行排版
<h1><h5><h3><h2></h2></h3></h5></h1><h1></h1><h1></h1><h1><h6></h6><h1></h1></h1>
例如对这个字符串进行排版
<h1><h5><h3><h2></h2></h3></h5></h1><h1></h1><h1></h1><h1><h6></h6><h1></h1></h1>
直接看代码:
import java.util.*;
public class HTMLTagLayout {
public static void main(String[] args) {
String html = "<h1><h5><h3><h2></h2></h3></h5></h1><h1></h1><h1></h1><h1><h6></h6><h1></h1></h1>";
Map<Integer, List<String>> tagMap = parseHTML(html);
String output = formatTagMap(tagMap);
System.out.println(output);
}
// 解析HTML字符串,返回一个按照标签级别分组的Map
private static Map<Integer, List<String>> parseHTML(String html) {
Map<Integer, List<String>> tagMap = new TreeMap<>();
int level = 0;
for (int i = 0; i < html.length(); i++) {
char c = html.charAt(i);
if (c == '<') {
if (html.charAt(i + 1) == '/') {
level--;
} else {
level++;
}
String tag = "";
while (i < html.length() && html.charAt(i) != '>') {
tag += html.charAt(i);
i++;
}
tag += '>';
List<String> tags = tagMap.getOrDefault(level, new ArrayList<>());
tags.add(tag);
tagMap.put(level, tags);
}
}
return tagMap;
}
// 将按照标签级别分组的Map格式化输出
private static String formatTagMap(Map<Integer, List<String>> tagMap) {
StringBuilder sb = new StringBuilder();
for (int level : tagMap.keySet()) {
List<String> tags = tagMap.get(level);
for (String tag : tags) {
sb.append(" ".repeat(level)).append(tag).append("\n");
}
}
return sb.toString();
}
}
输出结果为
<h1>
<h5>
<h3>
<h2></h2>
</h3>
</h5>
</h1>
<h1></h1>
<h1></h1>
<h1>
<h6></h6>
<h1></h1>
</h1>