希望你能提供帮助。仍然试图让我的头围绕java!
我将要存储(稍后使用)的文本文件的内容放入2D arraylist中。 文本文件示例如下所示(不确定行数上的条目数不确定):
狗,猫,猴,象
芯片,香肠,豆子,鼠标,蚂蚁
任何东西,无论如何,某些物体,不知道,每一行都有不同的数值
我希望能够像现在一样打印出文本文件,但项目整齐地存储在我的2D arraylist(biD)中 e.g:
狗|猫|猴子|大象|
芯片|香肠|豆|鼠标|蚂蚁|
任何|任何|某个对象| dunno |每一行都有不同的|数量的值|
但是当我运行下面的程序时,我得到:
col是15
狗|猫|猴子|大象|芯片|香肠|豆|鼠标|蚂蚁|任何|任何|某些对象| dunno |每行都有不同的|数量的值|
狗|猫|猴子|大象|芯片|香肠|豆|鼠标|蚂蚁|任何|任何|某些对象| dunno |每行都有不同的|数量的值|
狗|猫|猴子|大象|芯片|香肠|豆|鼠标|蚂蚁|任何|任何|某个对象| dunno |每一行都有不同的|数量的值|
即。 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如何正常工作!)
任何想法,任何人?
感谢。
答案 0 :(得分:1)
每行需要一个新的List实例。
在你的代码中,你在每行中放入完全相同的list实例,这导致所有行都相同。
所以在你的while循环中移动它
ArrayList<String> line = new ArrayList<String>();
答案 1 :(得分:0)
行变量声明一次,并在每次获得新行时写入。声明语句必须在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
}...