缓冲区字符串到数组列表,并拆分

时间:2013-05-03 12:23:03

标签: java

我正在缓存一个'arraylist lines'的文本文件,然后我需要将每一行拆分成一个新的arrayList部分,这样我就可以从每一行找到信息并将数据添加到我建立的模型中,原因是我使用arrayLists是因为有可扩展的属性,这意味着我不需要担心行或文本文件的大小。

代码如下:

    try(BufferedReader buffer = 
            new BufferedReader(new FileReader("src/Sample.txt")))
    {
        String currentLine;
        ArrayList<String> lines = new ArrayList<String>();
        ArrayList<String> parts = new ArrayList<String>();
        //ListIterator<String> lineItr = lines.listIterator();

        while((currentLine = buffer.readLine()) != null)
        {
            lines.add(currentLine);

            for(String line : lines)
            {
                parts.addAll(line.split("\\s+"));

            }


            //lineItr.next();
            //lineItr.set(currentLine);

            //System.out.println(lineItr.next());
        }
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }

}

我遇到了parts.addAll(line.split(“\ s +”); 我不明白为什么声明不会遍历行,拆分并将字符串的每个部分添加到部件数组列表中,我在这里误解了什么?

感谢Babble

5 个答案:

答案 0 :(得分:3)

list.addAll()接受java.util.Collection,其中str.split返回一个数组不是集合。因此,您无法将其直接添加到列表中。您需要先转换为列表。

for(String line : lines)
{
   parts.addAll(Arrays.asList(line.split("\\s+"));
}

答案 1 :(得分:2)

String.split()返回String的String。因此,您必须使用Arrays.asList()将其转换为列表。

parts.addAll(line.split("\\s+"));

上面的行应该是:

parts.addAll(Arrays.asList(line.split("\\s+")));

或者:

Collections.addAll(parts, line.split("\\s+"));

答案 2 :(得分:2)

试试这个

parts.addAll(Arrays.asList(line.split("\\s+")));

答案 3 :(得分:1)

List.addAll接受Collection但line.split("\\s+")返回String []。你可以这样做

parts.addAll(Arrays.asList(line.split("\\s+")));

答案 4 :(得分:0)

每次新线到达时,您都会将整个事物重新附加。删除内部“for”循环,然后只拆分currentLine。

根据评论编辑:

Java Way将把年和月对象实现为容器。更简单的替代方法是使用字符串键映射。