将 .txt 文件的内容读入二维字符串 ARRAYLIST
Read the contents of a .txt file into a 2D string ARRAYLIST
希望能帮到你。仍在努力让我的头脑清醒 java!
我有一个文本文件的内容,我想将其存储(并在以后使用)到二维数组列表中。
文本文件示例如下所示(不确定行数上的不确定条目数):
狗、猫、猴子、大象
薯条、香肠、豆子、老鼠、蚂蚁
任何东西,无论如何,一些对象,不知道,每一行都有不同的值
我希望能够按原样打印出文本文件,但其中的项目整齐地存储在我的二维数组列表 (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)
拆分字符串并将项目存储在字符串数组 (items)
将项目添加到数组列表(行)
将该数组列表添加到数组列表 biD。
(我想这就是我要出错的地方。我想可能不理解数组列表是如何正常工作的!)
大家有什么想法吗?
谢谢。
您需要为每一行创建一个新的 List 实例。
在您的代码中,您在每一行中放置了完全相同的列表实例,这导致所有行都相同。
所以将它移到你的 while 循环中
ArrayList<String> line = new ArrayList<String>();
行变量声明一次,每次换行时写入。必须将声明语句移到 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
}...
希望能帮到你。仍在努力让我的头脑清醒 java!
我有一个文本文件的内容,我想将其存储(并在以后使用)到二维数组列表中。 文本文件示例如下所示(不确定行数上的不确定条目数):
狗、猫、猴子、大象
薯条、香肠、豆子、老鼠、蚂蚁
任何东西,无论如何,一些对象,不知道,每一行都有不同的值
我希望能够按原样打印出文本文件,但其中的项目整齐地存储在我的二维数组列表 (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)
拆分字符串并将项目存储在字符串数组 (items)
将项目添加到数组列表(行)
将该数组列表添加到数组列表 biD。
(我想这就是我要出错的地方。我想可能不理解数组列表是如何正常工作的!)
大家有什么想法吗?
谢谢。
您需要为每一行创建一个新的 List 实例。
在您的代码中,您在每一行中放置了完全相同的列表实例,这导致所有行都相同。
所以将它移到你的 while 循环中
ArrayList<String> line = new ArrayList<String>();
行变量声明一次,每次换行时写入。必须将声明语句移到 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
}...