从文本文件读取 table 到二维数组
Reading table from a text file to a 2darray
我有一个 java 代码,我在其中读取一个 txt 文件,然后对其进行迭代,以便我可以将其填充到二维数组中。
读取文件后,我能够打印出其内容,因此我确定文件已被读取。并且我还确定 bufferedreader 库的 .hasNextLine 方法在找到一行时显示为 true。
但是当我在 while 循环中使用它时,它就像没有找到任何行一样,因此它没有迭代,所以我不知道我在 table.==>[=14 中有多少行=]
while (sc.hasNextLine()==true){ row++;}
此外,当我对行数进行硬编码以便检查其他一切是否正常时,我收到一条未找到行的错误。请帮帮我。
我将 link 下面的代码。
package com.company;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void
main(String args[]) throws Exception {
int row=0;
int column=0;
int count=0;
BufferedReader x = new BufferedReader(new FileReader("src\Table.txt"));
Scanner sc = new Scanner(x);
System.out.println(sc.nextLine()+sc.hasNextLine()+"\n"+sc.nextLine()+sc.hasNext()+"\n"+sc.nextLine()+"\n"+sc.nextLine()+sc.hasNextLine());
while (sc.hasNextLine()==true){ row++;}
System.out.println(row);
for (int i=0; i<row; i++) {
String[] line = sc.nextLine().trim().split(",");
System.out.println(line);
for (String line1 : line) {
if (",".equals(line1)) {
count++;
}
count+=1;
if(count>column){
column=count;
}
}
}
String [][] myArray = new String[row][column];
for (int i=0; i<myArray.length; i++) {
String[] line = sc.nextLine().trim().split(",");
for (int j=0; j<line.length; j++) {
myArray[i][j]= line[j];
}
}
System.out.println(Arrays.deepToString(myArray));
}
}
我也得到这个输出
"C:\Program Files\Java\jdk-12.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=52205:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\acer pc\IdeaProjects\PDM\out\production\PDM" com.company.Main
CalculusII,Algebra,Networktrue
CalculusII,Algebra,Webtrue
CalculusIII,Prog2,Network
Algebra,Prog1,Webfalse
0
[]
Process finished with exit code 0
当您执行以下语句时,您已经阅读了整个文件,因此没有剩余行可供阅读。
System.out.println(sc.nextLine()+sc.hasNextLine()+"\n"+sc.nextLine()+sc.hasNext()+"\n"+sc.nextLine()+"\n"+sc.nextLine()+sc.hasNextLine());
这就是为什么您的后续迭代立即停止并且未显示预期输出的原因。也许,您所期望的是扫描仪的内部光标在到达文件末尾后自行重置。但是,这绝对不是 Scanner
class(或任何其他)的行为,并且其方法的 none 提供将扫描仪的光标重置或重新定位到文件的特定点.
您需要做的是关闭您的连接并 re-establish 它们以重新开始阅读内容。例如,您可以在 try 块中包含每个文件消耗,以便在完成后自动处理每个连接。
为了简化您的代码,在您的第一个循环中您可以计算行数并检查具有“最多列”的行,而在您的第二个循环中您可以 re-read 文件的内容。
public class Main {
public static void main(String args[]) {
int row = 0;
int column = 0;
int tmp = 0;
try (FileReader fr = new FileReader("src\Table.txt");
BufferedReader br = (new BufferedReader(fr));
Scanner sc = new Scanner(br)) {
//First file consumption
while (sc.hasNextLine()) {
row++;
tmp = sc.nextLine().split(",").length;
if (tmp > column) {
column = tmp;
}
}
System.out.println(row);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
try (FileReader fr = new FileReader("src\Table.txt");
BufferedReader br = (new BufferedReader(fr));
Scanner sc = new Scanner(br)) {
//Second file consumption
String[][] myArray = new String[row][column];
for (int i = 0; i < myArray.length; i++) {
String[] line = sc.nextLine().trim().split(",");
for (int j = 0; j < line.length; j++) {
myArray[i][j] = line[j];
}
}
System.out.println(Arrays.deepToString(myArray));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
我有一个 java 代码,我在其中读取一个 txt 文件,然后对其进行迭代,以便我可以将其填充到二维数组中。 读取文件后,我能够打印出其内容,因此我确定文件已被读取。并且我还确定 bufferedreader 库的 .hasNextLine 方法在找到一行时显示为 true。 但是当我在 while 循环中使用它时,它就像没有找到任何行一样,因此它没有迭代,所以我不知道我在 table.==>[=14 中有多少行=]
while (sc.hasNextLine()==true){ row++;}
此外,当我对行数进行硬编码以便检查其他一切是否正常时,我收到一条未找到行的错误。请帮帮我。 我将 link 下面的代码。
package com.company;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void
main(String args[]) throws Exception {
int row=0;
int column=0;
int count=0;
BufferedReader x = new BufferedReader(new FileReader("src\Table.txt"));
Scanner sc = new Scanner(x);
System.out.println(sc.nextLine()+sc.hasNextLine()+"\n"+sc.nextLine()+sc.hasNext()+"\n"+sc.nextLine()+"\n"+sc.nextLine()+sc.hasNextLine());
while (sc.hasNextLine()==true){ row++;}
System.out.println(row);
for (int i=0; i<row; i++) {
String[] line = sc.nextLine().trim().split(",");
System.out.println(line);
for (String line1 : line) {
if (",".equals(line1)) {
count++;
}
count+=1;
if(count>column){
column=count;
}
}
}
String [][] myArray = new String[row][column];
for (int i=0; i<myArray.length; i++) {
String[] line = sc.nextLine().trim().split(",");
for (int j=0; j<line.length; j++) {
myArray[i][j]= line[j];
}
}
System.out.println(Arrays.deepToString(myArray));
}
}
我也得到这个输出
"C:\Program Files\Java\jdk-12.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=52205:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\acer pc\IdeaProjects\PDM\out\production\PDM" com.company.Main
CalculusII,Algebra,Networktrue
CalculusII,Algebra,Webtrue
CalculusIII,Prog2,Network
Algebra,Prog1,Webfalse
0
[]
Process finished with exit code 0
当您执行以下语句时,您已经阅读了整个文件,因此没有剩余行可供阅读。
System.out.println(sc.nextLine()+sc.hasNextLine()+"\n"+sc.nextLine()+sc.hasNext()+"\n"+sc.nextLine()+"\n"+sc.nextLine()+sc.hasNextLine());
这就是为什么您的后续迭代立即停止并且未显示预期输出的原因。也许,您所期望的是扫描仪的内部光标在到达文件末尾后自行重置。但是,这绝对不是 Scanner
class(或任何其他)的行为,并且其方法的 none 提供将扫描仪的光标重置或重新定位到文件的特定点.
您需要做的是关闭您的连接并 re-establish 它们以重新开始阅读内容。例如,您可以在 try 块中包含每个文件消耗,以便在完成后自动处理每个连接。
为了简化您的代码,在您的第一个循环中您可以计算行数并检查具有“最多列”的行,而在您的第二个循环中您可以 re-read 文件的内容。
public class Main {
public static void main(String args[]) {
int row = 0;
int column = 0;
int tmp = 0;
try (FileReader fr = new FileReader("src\Table.txt");
BufferedReader br = (new BufferedReader(fr));
Scanner sc = new Scanner(br)) {
//First file consumption
while (sc.hasNextLine()) {
row++;
tmp = sc.nextLine().split(",").length;
if (tmp > column) {
column = tmp;
}
}
System.out.println(row);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
try (FileReader fr = new FileReader("src\Table.txt");
BufferedReader br = (new BufferedReader(fr));
Scanner sc = new Scanner(br)) {
//Second file consumption
String[][] myArray = new String[row][column];
for (int i = 0; i < myArray.length; i++) {
String[] line = sc.nextLine().trim().split(",");
for (int j = 0; j < line.length; j++) {
myArray[i][j] = line[j];
}
}
System.out.println(Arrays.deepToString(myArray));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}