Java 解析集合<;字符串>;并创建一个新集合<;字符串>;基于公共分隔符

Java 解析集合<;字符串>;并创建一个新集合<;字符串>;基于公共分隔符,java,Java,我试图获取一组字符串,并使用最有效的算法将它们转换为如下所示。有什么想法吗 Set<String> directoryList = new HashSet<String>() { { add("a/a1/a2/a3"); add("b/b1/b2/b3"); add("c/c1/c2/c3/c4"); } }; //need construct a new Set<String

我试图获取一组字符串,并使用最有效的算法将它们转换为如下所示。有什么想法吗

Set<String> directoryList = new HashSet<String>() {
      {
        add("a/a1/a2/a3");
        add("b/b1/b2/b3");
        add("c/c1/c2/c3/c4");
      }
    };

    //need construct a new Set<String> which contains:
    a
    a/a1
    a/a1/a2
    a/a1/a2/a3
    b
    b/b1
    b/b1/b2
    b/b1/b2/b3
    c
    c/c1
    c/c1/c2
    c/c1/c2/c3
    c/c1/c2/c3/c4
Set directoryList=new HashSet(){
{
添加(“a/a1/a2/a3”);
添加(“b/b1/b2/b3”);
添加(“c/c1/c2/c3/c4”);
}
};
//需要构造一个包含以下内容的新集合:
A.
a/a1
a/a1/a2
a/a1/a2/a3
B
b/b1
b/b1/b2
b/b1/b2/b3
C
c/c1
c/c1/c2
c/c1/c2/c3
c/c1/c2/c3/c4

您可以用这种方式尝试

  Set<String> directoryList = new HashSet<String>() {
        {
            add("a/a1/a2/a3");
            add("b/b1/b2/b3");
            add("c/c1/c2/c3/c4");
        }
    };

    Set<String> newSet=new LinkedHashSet<String>();
    for(String i:directoryList){
        String[] str=i.split("/");
        StringBuilder sb=new StringBuilder();
        for(String s:str){
            sb.append(s);
            newSet.add(sb.toString());
            sb.append("/");
        }
    }


这是我提出的另一种方法,希望能有所帮助,我只是解决了一个案例,我相信你知道如何扩展它

 public class LetterExtraction {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Set<String> directoryList = new TreeSet<String>() {
            {
                add("a-a1-a2-a3");
                add("b-b1-b2-b3");
                add("c-c1-c2-c3-c4");
            }
        };

        for (String s : directoryList) {

            //String s = "a-a1-a2-a3-a4";
            String outCome = "";
            char[] c = s.toCharArray();
            char ch = 0;
            for (int i = 0; i < c.length; i++) {
                if (c[i] == '-') {
                    System.out.print(outCome);
                    System.out.print("\n");
                    outCome += c[i];
                } else {
                    outCome += c[i];
                }
            }
            System.out.println(outCome);
        }
    }
}

LinkedHashSet用于自然排序,对吗?使用LinkedHashSet与树集相比有什么优势吗?两者似乎都很自然地排序(a、a/a1、a/a1/a2..等等),也会将答案更新为LinkedHashSet而不是LinkedHashSet,因为这会在Java1中导致编译错误。6@c12是
LinkedHashSet
用于维持秩序<代码>树集使用树结构(算法手册中的红黑树)实现。集合中的元素是经过排序的,但add、remove和contains方法的时间复杂度为
O(log(n))
。它提供了几种处理有序集合的方法,如first()、last()、headSet()、tailSet()等。
LinkedHashSet
介于
HashSet
TreeSet
之间。它被实现为一个哈希表,其中有一个
链表
,因此它提供了插入顺序。基本方法的时间复杂度是O(1)。我不明白为什么它从c开始而不是a?它从c开始,因为哈希集没有排序。试试TreeSet。
a
a/a1
a/a1/a2
a/a1/a2/a3
b
b/b1
b/b1/b2
b/b1/b2/b3
c
c/c1
c/c1/c2
c/c1/c2/c3
c/c1/c2/c3/c4
 public class LetterExtraction {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Set<String> directoryList = new TreeSet<String>() {
            {
                add("a-a1-a2-a3");
                add("b-b1-b2-b3");
                add("c-c1-c2-c3-c4");
            }
        };

        for (String s : directoryList) {

            //String s = "a-a1-a2-a3-a4";
            String outCome = "";
            char[] c = s.toCharArray();
            char ch = 0;
            for (int i = 0; i < c.length; i++) {
                if (c[i] == '-') {
                    System.out.print(outCome);
                    System.out.print("\n");
                    outCome += c[i];
                } else {
                    outCome += c[i];
                }
            }
            System.out.println(outCome);
        }
    }
}
a
a-a1
a-a1-a2
a-a1-a2-a3
b
b-b1
b-b1-b2
b-b1-b2-b3
c
c-c1
c-c1-c2
c-c1-c2-c3
c-c1-c2-c3-c4