我有一个文本文件,其中包含具有二维数组格式的字符序列,我想将这些字符加载到二维数组中
I have a text file that contains a sequence of characters that has the format of a 2d array and I want to load those characters into a 2d array
这是文本文件的样子:
15、10
E E V I S S I M D N O F O R P
V S S P E V O Y A G E S U A P
N I S B E R E V E R T U E U X
O O R A C J I N F I C O N R D
I N D G O G O U P A N H I U T
S E E U U U R U D B A N A N E
A G C E T L L U R E R T M N G
CART E E E P E N S I O N D
C R E T R U E H C O A I D E U
O O T E V I V A C E C L R E B
第一行是字符网格的尺寸。
我遇到的问题是它没有读取整行网格。
这是我想出的:
File myFile = new File(file);
Scanner myReader = null;
try {
myReader = new Scanner(myFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (myFile.exists()) {
String firstLine = myReader.nextLine();
// cols
int cols = Integer.parseInt(firstLine.charAt(0) + "" + firstLine.charAt(1));
// rows
int rows = Integer.parseInt(firstLine.charAt(4) + "" + firstLine.charAt(5));
tabLettres = new char[rows][cols];
char[] lineArray = null;
String line = "";
for (int i = 0; i < tabLettres.length; i++) {
line = myReader.nextLine();
lineArray = line.toCharArray();
for (int j = 0; j < tabLettres[i].length; j++) {
tabLettres[i][j] = lineArray[j];
}
}
我得到的是:
E E V I S S I M
V S S P E V O Y
N I S B E R E V
O O R A C J I N
I N D G O G O U
S E E U U U R U
A G C E T L L U
CART E E E P
C R E T R U E H
O O T E V I V A
如您所见,直到列的全长才开始阅读。
这也是我用来打印数组的方法
public void loadArray() {
for (int i = 0; i < tabLettres.length; i++) {
for (int j = 0; j < tabLettres[i].length; j++) {
System.out.print(tabLettres[i][j] + " ");
}
System.out.println();
}
}
您正在此处的空白处阅读。一旦你读完你的行,运行 line.replaceAll(" ", "")
就可以去掉这些空格。这样,您将只会读入相关字符。希望这对您有所帮助!
您不需要嵌套循环来执行此操作。
- 首先,忘记列,您只需要行来分配数组以保存读入的所有行。
- 读入维度并使用拆分捕获行。
- 为那么多行分配字符数组。
- 现在逐行读取文件,用空字符串替换空格,然后调用
toCharArray()
并使用该数组填充二维数组的列。
File file = new File("f:/griddata.txt");
try (Scanner scan = new Scanner(file)) {
String[] dimensions = scan.nextLine().split("\s*,\s*");
int rows = Integer.parseInt(dimensions[1]);
char[][] tabLettres = new char[rows][];
int row = 0;
while (scan.hasNextLine()) {
tabLettres[row++] = scan.nextLine().replace(" ", "")
.toCharArray();
}
// print results
for (char[] char_row : tabLettres ) {
System.out.println(Arrays.toString(char_row));
}
} catch (FileNotFoundException fne) {
fne.printStackTrace();
}
打印
[E, E, V, I, S, S, I, M, D, N, O, F, O, R, P]
[V, S, S, P, E, V, O, Y, A, G, E, S, U, A, P]
[N, I, S, B, E, R, E, V, E, R, T, U, E, U, X]
[O, O, R, A, C, J, I, N, F, I, C, O, N, R, D]
[I, N, D, G, O, G, O, U, P, A, N, H, I, U, T]
[S, E, E, U, U, U, R, U, D, B, A, N, A, N, E]
[A, G, C, E, T, L, L, U, R, E, R, T, M, N, G]
[C, A, R, T, E, E, E, P, E, N, S, I, O, N, D]
[C, R, E, T, R, U, E, H, C, O, A, I, D, E, U]
[O, O, T, E, V, I, V, A, C, E, C, L, R, E, B]
这是文本文件的样子:
15、10
E E V I S S I M D N O F O R P
V S S P E V O Y A G E S U A P
N I S B E R E V E R T U E U X
O O R A C J I N F I C O N R D
I N D G O G O U P A N H I U T
S E E U U U R U D B A N A N E
A G C E T L L U R E R T M N G
CART E E E P E N S I O N D
C R E T R U E H C O A I D E U
O O T E V I V A C E C L R E B
第一行是字符网格的尺寸。
我遇到的问题是它没有读取整行网格。
这是我想出的:
File myFile = new File(file);
Scanner myReader = null;
try {
myReader = new Scanner(myFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (myFile.exists()) {
String firstLine = myReader.nextLine();
// cols
int cols = Integer.parseInt(firstLine.charAt(0) + "" + firstLine.charAt(1));
// rows
int rows = Integer.parseInt(firstLine.charAt(4) + "" + firstLine.charAt(5));
tabLettres = new char[rows][cols];
char[] lineArray = null;
String line = "";
for (int i = 0; i < tabLettres.length; i++) {
line = myReader.nextLine();
lineArray = line.toCharArray();
for (int j = 0; j < tabLettres[i].length; j++) {
tabLettres[i][j] = lineArray[j];
}
}
我得到的是:
E E V I S S I M
V S S P E V O Y
N I S B E R E V
O O R A C J I N
I N D G O G O U
S E E U U U R U
A G C E T L L U
CART E E E P
C R E T R U E H
O O T E V I V A
如您所见,直到列的全长才开始阅读。 这也是我用来打印数组的方法
public void loadArray() {
for (int i = 0; i < tabLettres.length; i++) {
for (int j = 0; j < tabLettres[i].length; j++) {
System.out.print(tabLettres[i][j] + " ");
}
System.out.println();
}
}
您正在此处的空白处阅读。一旦你读完你的行,运行 line.replaceAll(" ", "")
就可以去掉这些空格。这样,您将只会读入相关字符。希望这对您有所帮助!
您不需要嵌套循环来执行此操作。
- 首先,忘记列,您只需要行来分配数组以保存读入的所有行。
- 读入维度并使用拆分捕获行。
- 为那么多行分配字符数组。
- 现在逐行读取文件,用空字符串替换空格,然后调用
toCharArray()
并使用该数组填充二维数组的列。
File file = new File("f:/griddata.txt");
try (Scanner scan = new Scanner(file)) {
String[] dimensions = scan.nextLine().split("\s*,\s*");
int rows = Integer.parseInt(dimensions[1]);
char[][] tabLettres = new char[rows][];
int row = 0;
while (scan.hasNextLine()) {
tabLettres[row++] = scan.nextLine().replace(" ", "")
.toCharArray();
}
// print results
for (char[] char_row : tabLettres ) {
System.out.println(Arrays.toString(char_row));
}
} catch (FileNotFoundException fne) {
fne.printStackTrace();
}
打印
[E, E, V, I, S, S, I, M, D, N, O, F, O, R, P]
[V, S, S, P, E, V, O, Y, A, G, E, S, U, A, P]
[N, I, S, B, E, R, E, V, E, R, T, U, E, U, X]
[O, O, R, A, C, J, I, N, F, I, C, O, N, R, D]
[I, N, D, G, O, G, O, U, P, A, N, H, I, U, T]
[S, E, E, U, U, U, R, U, D, B, A, N, A, N, E]
[A, G, C, E, T, L, L, U, R, E, R, T, M, N, G]
[C, A, R, T, E, E, E, P, E, N, S, I, O, N, D]
[C, R, E, T, R, U, E, H, C, O, A, I, D, E, U]
[O, O, T, E, V, I, V, A, C, E, C, L, R, E, B]