Java:如何创建一个Java树,由字符串路径命名

The*_*rXP 7 java tree data-structures

我有一个像这样的字符串路径列表:

{"/ foo","/ bar","/ foo/admin","/ foo/cust","/ bar/erp","/ bar/erp/call","/ foo/cust/profile"}

如何创建一个ordred字符串树路径?或者我在哪里可以找到一种可以解决我的问题的图书馆?

另一部分,是我想知道如何循环获取我需要的信息的结构(例如,一个树节点将包含一个字符串路径,但也可以包含一个带有路径属性的对象的集合)所以你可以理解需要一个复杂的数据结构

树可以这样表示:

- /
-- /foo
-- -- /foo/admin
-- -- /foo/cust
-- -- -- /foo/cust/profile
-- /bar
-- -- /bar/erp
-- -- -- /bar/erp/call
Run Code Online (Sandbox Code Playgroud)

谢谢

ret*_*ker 7

你需要什么:

  1. 一个主循环,从开始到结束一次遍历字符串数组1.
  2. 一个tokenizer函数,它将路径(如/ foo/bar/sid)拆分为字符串数组{'foo','bar','sid'}.
  3. 树结构(如果你不知道如何在内存中表示树,请查看这个java的方法:http://vivin.net/2010/01/30/generic-n-ary-tree-in-java /但是,查看语言独立指南也是有益的,因为它可以让您对其背后的理论有一个很好的概述:http://people.cis.ksu.edu/~schmidt/300s05/Lectures/Week7b. HTML).树的顶部应该是'root',因为foo和bar应该都在同一棵树下.

如何一起使用这些:在1.中遍历主数组,将每个字符串传递给2.中的一个标记器.使用新的标记化字符串通过树使用第一个标记作为树的第一个级别,第二个作为第二个标记,等等.当您遇到树中不存在的标记时,添加它们.

在构建树之后,您只需在其中遍历一个分支,一次回显其内容.

干杯,快乐的编码!


blu*_*iur 3

尝试这个:

import java.util.*;

public class Main {
public static void main(String[] args){
    List<String> data = Arrays.asList("/foo", "/bar", "/foo/admin", "/foo/cust", "/bar/erp", "/bar/erp/call", "/foo/cust/profile");

    // order by path
    Collections.sort(data, new Comparator<String>(){
        @Override public int compare(String o1, String o2) {
            return o1.compareTo(o2);
        }
    });

    for (String s : data){
        int length = s.split("/").length - 1; // -1 means.. without empty string
        for (int i=0; i< length; i++){
            System.out.print("-- ");
        }
        System.out.println(s);
    }
}   
}
Run Code Online (Sandbox Code Playgroud)

// 结果是

-- /bar
-- -- /bar/erp
-- -- -- /bar/erp/call
-- /foo
-- -- /foo/admin
-- -- /foo/cust
-- -- -- /foo/cust/profile
Run Code Online (Sandbox Code Playgroud)