解析Set <string>并根据Common Delimiter创建一个新的Set <string> </string> </string>

时间:2013-12-06 05:36:05

标签: 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> 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

2 个答案:

答案 0 :(得分:2)

你可以这样试试

  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("/");
        }
    }

通过运行

输出
    for(String st:newSet){
        System.out.println(st);
    }

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

答案 1 :(得分:0)

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

 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);
        }
    }
}

out come:

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