Java 如何遍历.txt文件并将结果存储在2d arrayList中
下面是一个txt文件的片段Java 如何遍历.txt文件并将结果存储在2d arrayList中,java,arraylist,Java,Arraylist,下面是一个txt文件的片段 Patrick Joseph 1254367 cmt101 Introduction to Computer Science 1 Computer Science Spring 2020 B+ 3 cmt102 Computer Networks 2 Computer Science Spring 2020 A 3 每8行减去前2行代表学院课程的属性。我试图将数据分为两个数组列表,课程和课程课程将是一个数组列表包含每个课程的属性,而课程将包含所有课程,因此课程中的数
Patrick Joseph
1254367
cmt101
Introduction to Computer Science
1
Computer Science
Spring
2020
B+
3
cmt102
Computer Networks
2
Computer Science
Spring
2020
A
3
每8行减去前2行代表学院课程的属性。我试图将数据分为两个数组列表
,课程
和课程
<代码>课程将是一个数组列表
包含每个课程的属性,而课程
将包含所有课程,因此课程
中的数据应如下所示:
[0][0] cmt101
[0][1] Introduction to Computer Science
[0][2] 1
[0][3] Computer Science
[0][4] Spring
[0][5] 2020
[0][6] B+
[0][7] 3
[1][0] cmt102
[1][1] Computer Networks
[1][2] 2
[1][3] Computer Science
[1][4] Spring
[1][5] 2020
[1][6] A
[1][7] 3
等等。无论文件中添加了多少课程,程序都应该能够迭代,同时跳过前两行
public static ArrayList<ArrayList<String>> courses;
public static ArrayList<String> course;
public static void getCourses(){
try{
course = new ArrayList<>();
courses = new ArrayList<>();
String fileName = "C:\\Users\\myComputer\\Desktop\\file.txt";
List<String> lines = Files.readAllLines(Paths.get(fileName), Charset.defaultCharset());
for (int i = 2; i < lines.size(); i += 8){
for (int j = 2; j <= 10; j++){
course.add(lines.get(j));
}
courses.add(course);
}
}
catch(IOException io){
io.printStackTrace(System.out);
}
}
// courses is printed in another method
公共静态数组列表课程;
公共静态ArrayList课程;
公共课程(){
试一试{
课程=新的ArrayList();
courses=newarraylist();
String fileName=“C:\\Users\\myComputer\\Desktop\\file.txt”;
List lines=Files.readAllLines(path.get(fileName)、Charset.defaultCharset());
对于(int i=2;i 对于(int j=2;j而言,问题在于您对内部列表使用了相同的引用,每次迭代都会重复使用该引用。您需要在内部循环和外部循环之间创建一个新的实例并限制其范围。这将确保始终创建一个新实例并将其插入外部列表
我也找不到在方法中实例化这些列表的理由。此外,ArrayList course;
的范围太广,破坏了您打算使用的逻辑。最后,针对接口编程:List List List=new ArrayList()
public static List courses=new ArrayList();
公共课程(){
试一试{
列表过程=新建ArrayList();
String fileName=“C:\\Users\\myComputer\\Desktop\\file.txt”;
Charset Charset=Charset.defaultCharset();
列表行=Files.readAllLines(路径.get(文件名),字符集);
对于(int i=2;i 对于(int j=2;j)谢谢您的回答。它迭代的次数正确,但重复了第一次迭代中的相同数据。我如何解决这个问题?
public static List<List<String>> courses = new ArrayList<>();
public static void getCourses() {
try {
List<String> course = new ArrayList<>();
String fileName = "C:\\Users\\myComputer\\Desktop\\file.txt";
Charset charset = Charset.defaultCharset();
List<String> lines = Files.readAllLines(Paths.get(fileName), charset);
for (int i = 2; i < lines.size(); i += 8) {
List<String> course = new ArrayList<>();
for (int j = 2; j <= 10; j++) {
course.add(lines.get(j));
}
courses.add(course);
}
} catch(IOException io) {
io.printStackTrace(System.out);
}
}