[英]Read the contents of a .txt file into a 2D string ARRAYLIST
希望能对您有所帮助。 仍然想让我的头脑变得井井有条!
我有一个文本文件的内容要存储(并在以后使用)到2D arraylist中。 文本文件示例如下所示(行数不确定的条目数不确定):
狗,猫,猴子,大象
芯片,香肠,豆,鼠标,蚂蚁
任何东西,任何对象,不知道,每行都有不同的值数
我希望能够按原样打印出文本文件,但将项目整齐地存储在我的2D arraylist(biD)中
例如:
狗|猫|猴子|大象|
芯片|香肠|豆子|小鼠|蚂蚁|
|任何|任何对象|不知道|每行具有不同的|值数量|
但是当我运行下面的程序时,我得到:
上校是15
狗|猫|猴子|大象|芯片|香肠|豆子|鼠标|任何物体|某些物体|不知道|每行都有不同的|值|
狗|猫|猴子|大象|芯片|香肠|豆子|鼠标|任何物体|某些物体|不知道|每行都有不同的|值|
狗|猫|猴子|大象|芯片|香肠|豆子|鼠标|任何物体|某些物体|不知道|每行都有不同的|值|
也就是说,txt文件中的每一行(在这种情况下为3)似乎在biD结构中生成了一个条目,其中包含txt文件中的所有行。 实际上,每一行都应仅包含txt文件中一行的项目。
这是代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class testData {
private static Scanner file;
static int rows;
public static void main(String[] args) throws FileNotFoundException {
ArrayList<ArrayList<String>> biD = new ArrayList<ArrayList<String>>();
file = new Scanner(new File("C:/tmp/text.txt"));
ArrayList<String> line = new ArrayList<String>();
while (file.hasNextLine()) {
final String nextLine = file.nextLine();
final String[] items = nextLine.split(",");
for (int i = 0; i < items.length; i++) {
line.add(items[i]);
}
biD.add(line);
rows++;
Arrays.fill(items, null); // to clear out the 'items' array
}
int col = biD.get(0).size();
System.out.println("col is " + col);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < biD.get(i).size(); j++) {
System.out.print(biD.get(i).get(j) + "|");
}
System.out.println();
}
}
}
因此,基本上我的biD结构似乎存储了太多信息。
因此,一个随心所欲(我认为)将是:
从文件中读取一行
存储在字符串中(nextLine)
分割字符串并将项目存储在字符串数组(项目)中
将项目添加到arraylist(行)
将该arraylist添加到arraylist biD。
(我认为这是我要出问题的地方。我认为可能不了解arraylists如何正常工作!)
有什么想法吗?
谢谢。
每行需要一个新的List实例。
在您的代码中,您在每一行中放置了完全相同的list实例,这导致所有行都是相同的。
因此,将其移入while循环中
ArrayList<String> line = new ArrayList<String>();
line变量只声明一次,每次获取新行时都会写入该变量。 声明语句必须在while循环内移动,因此将为每行添加一个新的声明。
public static void main(String[] args) throws FileNotFoundException {
ArrayList<ArrayList<String>> biD = new ArrayList<ArrayList<String>>();
file = new Scanner(new File("C:/tmp/text.txt"));
//ArrayList<String> line = new ArrayList<String>(); <-- Move down to
while (file.hasNextLine()) {
ArrayList<String> line = new ArrayList<String>(); <-- Down here
final String nextLine = file.nextLine();
final String[] items = nextLine.split(",");
for (int i = 0; i < items.length; i++) {
line.add(items[i]);
}
biD.add(line);
rows++;
Arrays.fill(items, null); // to clear out the 'items' array
}...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.