2011-08-09 64 views
2

我環顧四周,但似乎無法找到任何非常符合我需要的東西。我需要類似Java中的DataTable

我需要帶列標題的CSV文件讀取,例如:

NAME;AGE;HEIGHT 
dan;36;180 
john;31;181 
ben;30;190 

什麼目的我可以解析成讀取在那裏我可以再引用它,像這樣:

object.name = (string) someSortOfDataStructure["NAME"]; 
object.name = (int) someSortOfDataStructure["AGE"]; 

object.name = someSortOfDataStructure.getColumn("NAME"); 

在C#中,我可以用DataTable/DataRow之類的東西做到這一點。

回答

4

認爲OOP。您需要創建一個Person類屬性nameageheight

public class Person { 

    private String name; 
    private String age; 
    private String height; 

    // Getter and setter methods... 
} 

接下來,使用BufferedReader逐行讀取CSV文件。對於每行你想分割線使用line.split(";");給你一個String[]包含令牌。

對於行,你現在可以創建一個從令牌的Person;

Person person = new Person(); 
person.setName(tokens[0]); 
person.setAge(tokens[1]); 
person.setHeight(tokens[2]); 

注意,這假設列位置。如果你想刪除這個假設,你需要將Map頭部放到某個位置。

String headerLine = "NAME;AGE;HEIGHT"; 
String[] headers = headerLine.split(";"); 
Map<String,Integer> map = new HashMap<String,Integer>(); 
for (int i=0; i<headers.length; i++) { 
    map.put(headers[i], i); 
} 

然後,您可以通過它的名稱獲取列的位置;

Person person = new Person(); 
person.setName(tokens[map.get("NAME")]); 
person.setAge(tokens[map.get("AGE")]); 
person.setHeight(tokens[map.get("HEIGHT")]); 

Table類型類是反模式。當程序員不能用對象來思考時,他們往往會出現。我經常在遺留的java應用程序中看到Table類,並且它真正的PITA可以與它們一起工作。不要這樣做。

+0

感謝這是hasmap完美幫助我的hasmap部分。 –