-1

我正在尝试读取一个文件,其中包含

Name,Date,Place

Tom,1/1/2010,America
Dick,2/2/2011,China
Harry,3/3/2012,Germany

并将列标题添加到 String 并将值添加到 ArrayList。

HashMap<String columnName ,ArrayList<String> Value>

所以程序应该像这样运行,

if(lineNumber == 1)
{
   interate through values and create headers
}
else
   add values to corresponding header list

我的问题是我不知道如何else在代码部分引用数组列表。如果有人做过类似的事情,我想听听你的意见!

编辑

所以到目前为止我有这样的东西,

public void consumeLine(String path,int lineNumber,List line){

    if(lineNumber == 1)
    {
        ListIterator listIterator = line.listIterator();
        while(listIterator.hasNext())
        {   
            hashMap.put(listIterator.next().toString(),new ArrayList<String>());
        }
    }
4

2 回答 2

1

您想要创建一个列名的有序列表,并在迭代每一行中的值时对其进行迭代。

像这样的东西(未经测试的代码!):

ListIterator listIterator = line.listIterator();
if(lineNumber == 1)
{
    while(listIterator.hasNext())
    {   
        String key = listIterator.next().toString();
        keyList.add(key); // keyList is a List<String> instance field.
        hashMap.put(key, new ArrayList<String>());
    }
} else {
    Iterator<String> keyIterator = keyList.iterator();
    while(keyList.hasNext() && listIterator.hasNext())
    {
        String key = keyList.next();
        String value = listIterator.next();
        ArrayList<String> values = hashMap.get(key);
        values.add(value);
    }
}
于 2012-05-17T12:53:25.713 回答
0

试试看:

  public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
        int lineNumber = 1;
        String[] columnName = null;
        ArrayList<String[]> value = new ArrayList<String[]>(); // temp array
        String line;
        String[] arr;
        while (reader.ready())
            if (!(line = reader.readLine()).isEmpty()) {
                arr = line.split("\\s+");
                if (lineNumber == 1)
                    columnName = arr;// create headers
                else
                    value.add(arr);// create values
                lineNumber++;
            }
        // transform data
        for (int i = 0; i < columnName.length; i++) {
            ArrayList<String> ar = new ArrayList<String>();
            for (int j = 0; j < value.size(); j++)
                ar.add(value.get(j)[i]);
            map.put(columnName[i], ar);
        }
        System.out.println(map);
    }
于 2012-05-17T13:02:46.627 回答