我正在缓存一个'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
答案 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将把年和月对象实现为容器。更简单的替代方法是使用字符串键映射。