用java实现对随机生成的前端标签排版

例如对这个字符串进行排版

<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>