2012-07-18 67 views
6

ordred我有這樣的路徑字符串列表:的Java:如何創建一個Java樹,通過串路徑

{ 「/富」, 「/酒吧」, 「/富/ 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 

感謝

回答

2

試試這個:

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

//結果是

-- /bar 
-- -- /bar/erp 
-- -- -- /bar/erp/call 
-- /foo 
-- -- /foo/admin 
-- -- /foo/cust 
-- -- -- /foo/cust/profile 
+0

與java7測試 – blueiur 2012-07-18 15:21:13

6

你需要什麼:

  1. 一個從開始到結束一次遍歷字符串數組1的主循環。
  2. 一個將/ foo/bar/sid等路徑分割成字符串數組{{foo','bar','sid'}}的標記器函數。
  3. 一個樹結構(如果你不知道如何在內存中表示樹,請查看這個java how-to: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.每次一個。使用新的標記化字符串遍歷樹,使用第一個標記作爲樹的第一個級別,第二個標記化字符串等等,因爲遇到樹中不存在的標記時添加它們。

構建樹之後,您只需遍歷一個分支,一次回顯其內容。

乾杯,快樂編碼!

0

您可以嘗試使用比較以這種方式與數組:

String array[]={"/foo", "/bar", "/foo/admin", "/foo/cust", "/bar/erp", "/bar/erp/call", "/foo/cust/profile"}; 

Arrays.sort(array,new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     return o1.compareTo(o2); 
    } 
}); 

for(int i=0;i<array.length;i++){ 
    if(i>0){ 
     if(array[i].startsWith(array[i-1])){ 
      System.out.print("\t"); 
     } 
    } 
    System.out.println(array[i]); 
}