首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現文字模式樹狀結構輸出

     編輯:Java 相關知識

利用遞迴與字串建構器,即可在控制台輸出層次分明的樹狀目錄結構。以下完整範例展示 Folder 類別設計與繪製邏輯,支援任意深度巢狀節點,並使用 Unicode 盒繪字元(├、│、└)呈現視覺層級。

import java.util.ArrayList;
import java.util.List;

public class Folder {
    private String title;
    private List children = new ArrayList<>();

    public Folder(String title) {
        this.title = title;
    }

    public void addChild(Folder child) {
        children.add(child);
    }

    public List getChildren() {
        return children;
    }

    public String getTitle() {
        return title;
    }

    /**
     * 遞迴產生樹狀字串
     * @param leftPrefix  左側延伸前綴(如 "│  " 或 "   ")
     * @param nodePrefix  當前節點前綴("├──" 或 "└──")
     */
    public String toTreeString(String leftPrefix, String nodePrefix) {
        StringBuilder sb = new StringBuilder();
        sb.append(leftPrefix).append(nodePrefix).append(title).append("\n");

        if (!children.isEmpty()) {
            for (int i = 0; i < children.size() - 1; i++) {
                Folder child = children.get(i);
                sb.append(child.toTreeString(leftPrefix + "│  ", "├── "));
            }
            // 最後一個子節點使用└──,左側不再畫豎線
            Folder last = children.get(children.size() - 1);
            sb.append(last.toTreeString(leftPrefix + "   ", "└── "));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Folder root = new Folder("選單列表");
        Folder f1 = new Folder("開始選單");
        root.addChild(f1);
        f1.addChild(new Folder("程式集"));
        Folder accessories = new Folder("附屬應用程式");
        f1.addChild(accessories);
        accessories.addChild(new Folder("娛樂"));
        accessories.addChild(new Folder("娛樂2"));
        f1.addChild(new Folder("輔助工具"));
        root.addChild(new Folder("我的文件"));
        root.addChild(new Folder("我的文件2"));

        System.out.println(root.toTreeString("", ""));
    }
}

執行結果:

選單列表
├── 開始選單
│   ├── 程式集
│   ├── 附屬應用程式
│   │   ├── 娛樂
│   │   └── 娛樂2
│   └── 輔助工具
├── 我的文件
└── 我的文件2

核心技巧在於 toTreeString 遞迴時傳遞兩個前綴參數:leftPrefix 控制父層延伸線,nodePrefix 決定當前節點的分支符號。最後一個子節點改用 └── 並將左側延伸線改為空格,即可得到完美對齊的樹狀圖。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved