如何读取文件并将其保存到二维数组中?
How do I read and save a file into a 2D Array?
我想读取文件的内容并将其保存在二维数组中,但我不知道文件的大小,因为程序应该读取不同的文件。于是就有了"new char"之后的第一个问题。我搜索了这个问题,发现 "matrix[x][y]=zeile.charAt(x);"
应该是正确的,但是当我将任何数字写入新字符的第一个括号时,会抛出错误 "NullPointerException"。
有人可以解释并提供一些想法或解决方案吗?谢谢:)
import java.io.*;
class Unbenannt
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("Level4.txt");
BufferedReader br = new BufferedReader(fr);
String zeile = br.readLine();
char [][] matrix = new char [][];
while(zeile != null )
{
int y = 0;
for(int x = 0; x < zeile.length(); x++) {
matrix[x][y] = zeile.charAt(x);
}
y++;
} System.out.print(matrix);
br.close();
}
}
您初始化了矩阵 (char [][]),但从未初始化任何入站数组。这会导致 NullPointerException。
此外,您的 'while' 条件看起来无效,看来您只是在此处阅读文件的第一行 > 您的代码永远不会完成并一遍又一遍地阅读第一行
数组以块的形式存储在内存中,以实现O(1)的操作,这就是为什么你需要在定义时定义它们的大小。如果你坚持使用数组(而不是像 List
这样的动态 ADT),你需要提前知道维度。
你可以做的是将文件行临时存储在一个列表中并找出最大行长度,即:
List<String> lines = new ArrayList<String>();
String zeile = null;
int max = 0;
while ((zeile = br.readLine()) != null) {
lines.add(zeile);
if (zeile.length() > max)
max = zeile.length();
}
char[][] matrix = new char[lines.length()][max];
// populate the matrix:
for (int i = 0; i < lines.length(); i++) {
String line = lines.get(i);
for (int j = 0; j < line.length(); j++) {
matrix[i][j] = line.charAt(j);
}
}
请注意,由于 char
是原语,因此在内部数组的每个单元格中,您将使用默认值 0(整数,而不是字符!)进行初始化,因此对于较短的行与其他人相比,您将有尾随零字符。
谢谢大家!有用!但是还有一个问题。我将 lines.length() 更改为 lines.size(),因为它不适用于长度。问题是输出。例如,它显示:xxxx xxxx 而不是 "xxx" 和 "x x" 以及 "xxx"。
我怎样才能建立一个换行符?
我的程序代码是:
import java.io.*;
import java.util.ArrayList;
class Unbenannt
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("Level4.txt");
BufferedReader br = new BufferedReader(fr);
ArrayList<String> lines = new ArrayList<String>();
String zeile = null;
int max = 0;
while ((zeile = br.readLine()) != null) {
lines.add(zeile);
if (zeile.length() > max)
max = zeile.length();
}
char [][] matrix = new char[lines.size()][max];
for(int i = 0; i < lines.size(); i++) {
String line = lines.get(i);
for(int j = 0; j < line.length(); j++) {
matrix[i][j] = line.charAt(j);
System.out.print(matrix[i][j]);
}
}
br.close();
}
}
我想读取文件的内容并将其保存在二维数组中,但我不知道文件的大小,因为程序应该读取不同的文件。于是就有了"new char"之后的第一个问题。我搜索了这个问题,发现 "matrix[x][y]=zeile.charAt(x);" 应该是正确的,但是当我将任何数字写入新字符的第一个括号时,会抛出错误 "NullPointerException"。 有人可以解释并提供一些想法或解决方案吗?谢谢:)
import java.io.*;
class Unbenannt
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("Level4.txt");
BufferedReader br = new BufferedReader(fr);
String zeile = br.readLine();
char [][] matrix = new char [][];
while(zeile != null )
{
int y = 0;
for(int x = 0; x < zeile.length(); x++) {
matrix[x][y] = zeile.charAt(x);
}
y++;
} System.out.print(matrix);
br.close();
}
}
您初始化了矩阵 (char [][]),但从未初始化任何入站数组。这会导致 NullPointerException。
此外,您的 'while' 条件看起来无效,看来您只是在此处阅读文件的第一行 > 您的代码永远不会完成并一遍又一遍地阅读第一行
数组以块的形式存储在内存中,以实现O(1)的操作,这就是为什么你需要在定义时定义它们的大小。如果你坚持使用数组(而不是像 List
这样的动态 ADT),你需要提前知道维度。
你可以做的是将文件行临时存储在一个列表中并找出最大行长度,即:
List<String> lines = new ArrayList<String>();
String zeile = null;
int max = 0;
while ((zeile = br.readLine()) != null) {
lines.add(zeile);
if (zeile.length() > max)
max = zeile.length();
}
char[][] matrix = new char[lines.length()][max];
// populate the matrix:
for (int i = 0; i < lines.length(); i++) {
String line = lines.get(i);
for (int j = 0; j < line.length(); j++) {
matrix[i][j] = line.charAt(j);
}
}
请注意,由于 char
是原语,因此在内部数组的每个单元格中,您将使用默认值 0(整数,而不是字符!)进行初始化,因此对于较短的行与其他人相比,您将有尾随零字符。
谢谢大家!有用!但是还有一个问题。我将 lines.length() 更改为 lines.size(),因为它不适用于长度。问题是输出。例如,它显示:xxxx xxxx 而不是 "xxx" 和 "x x" 以及 "xxx"。 我怎样才能建立一个换行符? 我的程序代码是:
import java.io.*;
import java.util.ArrayList;
class Unbenannt
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("Level4.txt");
BufferedReader br = new BufferedReader(fr);
ArrayList<String> lines = new ArrayList<String>();
String zeile = null;
int max = 0;
while ((zeile = br.readLine()) != null) {
lines.add(zeile);
if (zeile.length() > max)
max = zeile.length();
}
char [][] matrix = new char[lines.size()][max];
for(int i = 0; i < lines.size(); i++) {
String line = lines.get(i);
for(int j = 0; j < line.length(); j++) {
matrix[i][j] = line.charAt(j);
System.out.print(matrix[i][j]);
}
}
br.close();
}
}