1

我正在将一个文本文件缓冲到“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+"); 时遇到问题;我不明白为什么该语句不遍历行、拆分字符串的每个部分并将其添加到部件数组列表中,我是不是误会了这里有什么?

谢谢胡言乱语

4

5 回答 5

3

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

for(String line : lines)
{
   parts.addAll(Arrays.asList(line.split("\\s+"));
}
于 2013-05-03T12:29:28.840 回答
2

String.split() 返回字符串数组。因此,您必须使用 Arrays.asList() 将其转换为 list 。

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

上面的行应该是:

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

或者 :

Collections.addAll(parts, line.split("\\s+"));
于 2013-05-03T12:27:32.543 回答
2

尝试这个

parts.addAll(Arrays.asList(line.split("\\s+")));
于 2013-05-03T12:28:59.527 回答
1

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

parts.addAll(Arrays.asList(line.split("\\s+")));
于 2013-05-03T12:27:39.113 回答
0

每次新行到达时,您都会重新附加整个内容。删除内部的“for”循环,而是拆分 currentLine。

根据评论编辑:

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

于 2013-05-03T12:31:17.657 回答