Java:将字符串转换为树

dee*_*dee 2 java tree

我有一个作为目录的字符串的排序列表,我需要显示为树.

例如,如果我有这些字符串:

"folder a/folder b/file 1"
"folder a/folder b/file 2"
"folder a/folder c"
Run Code Online (Sandbox Code Playgroud)

我需要将它们显示为:

folder a
|- folder b
|  |- file 1
|  |- file 2
|- folder c
Run Code Online (Sandbox Code Playgroud)

我正在考虑浏览列表并跟踪"父文件夹"(即第一个字符串的"文件夹a /文件夹b")并根据"父文件夹"是否相同来构建树.回到父文件夹时,这似乎相当复杂,我想知道是否有人可以推荐一种更简单/更有效的方法来做到这一点?

是否有助于迭代字符串并首先构建一个树,然后在显示它之前迭代树?值得注意的是,所有数据都保存为字符串(此树不会被保存),因此这需要我每次想要显示它时构建树数据结构.

msi*_*msi 6

希望有所帮助.构建目录的整个结构.讽刺短名称和缺乏泛型.希望它更具可读性.

public static void main(String[] args) {
    ArrayList<String> listOfPaths = new ArrayList<String>();
    listOfPaths.add("folder a/folder b/file 1");
    listOfPaths.add("folder a/folder b/file 2");
    listOfPaths.add("folder a/folder c");

    TreeMap structure = new TreeMap();
    for (String path : listOfPaths) {
        String[] tmp = path.split("/", 2); // [ "folder a/", "folder b/file 1"]  for first loops step
        put(structure, tmp[0], tmp[1]);
    }

    print(structure, "");
}
private static void put(TreeMap structure, String root, String rest) {
    String[] tmp = rest.split("/", 2);

    TreeMap rootDir = (TreeMap) structure.get(root);

    if (rootDir == null) {
        rootDir = new TreeMap();
        structure.put(root, rootDir);
    }
    if (tmp.length == 1) { // path end
        rootDir.put(tmp[0], null);
    } else {
        put(rootDir, tmp[0], tmp[1]);
    }
}
private static void print(TreeMap map, String delimeter) {
    if (map == null || map.isEmpty())
        return;
    for (Object m : map.entrySet()) {
        System.out.println(delimeter + "-" + ((Map.Entry)m).getKey());
        print((TreeMap)((Map.Entry)m).getValue(), " |" + delimeter);
    }
}
Run Code Online (Sandbox Code Playgroud)