2012-09-06 129 views
0

就我所處的地方而言,您無法在Java中使用動態名稱創建變量,因此我會解釋問題以查看是否有其他替代方法。我的問題是,我必須解析包含在英國法律很長的文字,至極都具有層次:動態名稱變量java(創建結構的解析器)

它以這種方式劃分:

書籍

----章節

--------文章 OR

書籍

----標題

--------章

-------------文章 OR

書籍

----標題

--------章

-------------第

-----------------文章

正如你可以告訴它在sittuation取決於結構必須改變。

書1:該信息必須從這樣的文件,要採取本書一個 標題1名:姓名職務一個 第1章:產品名稱章1 第1條:第1條 第2名:名第2條 第2章的名稱第2章 第1節:部分的名稱1 第3條:第3條 標題2的名稱:... 第1章:... ... 書 2: ... .... Book 3


所以你明白了,文本可能隨機包含分類,它不像第一章所有章節,然後是所有文章等等。

提出了今年的實現是:

public class Book { 
    private int id; 
    private List<Chapter> chapters; 
    private List<Title> titles; 

    // getters/setters/constructor 
} 

public class Chapter { 
    private int id; 
    private List<Section> section; 
    private List<Article> articles; 

    // getters/setters/constructor 
} 

public class Title { 
    private int id; 
    private List<Chapter> chapters; 

    // getters/setters/constructor 
} 

public class Section { 
    private int id; 
    private List<Article> articles; 

    // getters/setters/constructor 
} 

的問題是必須以動態的方式來創建列表。這是解析器說我需要書號n中的一個新的章節列表,我必須創建它。

我怎樣才能做到這一點?

在此先感謝

+0

我認爲地圖可能是創建動態變量的最佳選擇。 – kosa

+0

好的,我聽說過這個解決方案,但我不知道地圖是如何工作的。這裏最重要的是我需要知道元素是一本書還是什麼以及它應該在哪裏(哪本書在哪,在哪一章等等)。我必須製作一個菜單,例如:根據書籍選擇一本書和章節或書目列表,然後選擇,直到我將顯示文章文章的文章。感謝您的回答。 – yafrack

回答

3

最簡單的解決辦法是將它們全部實現一個Element接口,然後有接口包含對其他Element對象的引用:

public interface Element { 
    List<Element> getSubElements(); 
} 

然後書:

public class Book implements Element { 
    // Your other stuff 
    private List<Element> subElements; 

    public void getSubElements() { 
     return subElements; 
    } 
} 

Polymorphism處於最佳狀態。

+0

所以你不區分章節和文章的權利?但是,你如何將信息放在這個結構中並得到它?謝謝,我是java新手。 – yafrack