2012-07-18 29 views
6

Tôi có một danh sách các đường dây như thế này:Java: Làm thế nào để tạo ra một cây Java, ordred bởi đường dây

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

Làm thế nào để tạo đường dẫn cây chuỗi có thứ tự? Hoặc tôi có thể tìm thấy một loại thư viện nào có thể giải quyết vấn đề của tôi?

phần khác, là tôi muốn biết cách lặp lại cấu trúc lấy thông tin mà tôi cần (ví dụ: Nút cây sẽ chứa đường dẫn chuỗi nhưng cũng có thể chứa một tập hợp đối tượng có thuộc tính đường dẫn) để bạn có thể hiểu rằng cần một cấu trúc dữ liệu phức tạp

cây có thể được biểu diễn như thế này:

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

Cảm ơn

Trả lời

2

thử điều này:

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

kết quả // là

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

thử nghiệm với java7 – blueiur

6

Những gì bạn cần:

  1. Vòng lặp chính lặp lại qua chuỗi chuỗi 1 tại một thời điểm từ đầu đến cuối.
  2. Chức năng mã thông báo tách một đường dẫn như/foo/bar/sid thành một chuỗi các chuỗi {'foo', 'bar', 'sid'}.
  3. Cấu trúc cây (nếu bạn không biết cách thể hiện cây trong bộ nhớ, hãy xem cách thực hiện java này: http://vivin.net/2010/01/30/generic-n-ary-tree-in-java/ nhưng sẽ có ích khi xem hướng dẫn độc lập về ngôn ngữ cũng vì nó sẽ mang lại cho bạn tổng quan về lý thuyết đằng sau nó: http://people.cis.ksu.edu/~schmidt/300s05/Lectures/Week7b.html). Phần trên cùng của cây của bạn phải giống như 'root' vì foo và bar phải ở dưới cùng một cây.

Cách sử dụng chúng cùng nhau: Lặp lại qua mảng chính trong 1., chuyển mỗi chuỗi tới trình mã thông báo trong 2. mỗi lần một. Sử dụng chuỗi tokenized mới để đi qua cây bằng cách sử dụng các mã thông báo đầu tiên là cấp độ đầu tiên của cây, thứ hai là thứ hai, vv như bạn gặp phải thẻ không tồn tại trong cây, thêm chúng.

Sau khi xây dựng cây, bạn chỉ cần lặp qua nó một nhánh tại một thời điểm vang vọng nội dung của nó.

Chúc mừng và mã hóa vui vẻ!

0

Bạn có thể thử sử dụng sánh với Mảng theo cách này:

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]); 
} 
Các vấn đề liên quan