Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将文件读取并保存到二维数组中?_Java_File_Char_2d - Fatal编程技术网

Java 如何将文件读取并保存到二维数组中?

Java 如何将文件读取并保存到二维数组中?,java,file,char,2d,Java,File,Char,2d,我想在2d数组中读取并保存文件的内容,但我不知道文件的大小,因为程序应该读取不同的文件。所以在“新字符”之后出现了第一个问题。我搜索这个问题,发现“矩阵[x][y]=zeile.charAt(x);” 应该是对的,但当我将任何数字写入新字符的第一个括号时,会抛出错误“NullPointerException”。 有人能解释一下并给出一些解决方案吗?谢谢:) import java.io.*; 类非本征 { 公共静态void main(字符串[]args)引发IOException { FileR

我想在2d数组中读取并保存文件的内容,但我不知道文件的大小,因为程序应该读取不同的文件。所以在“新字符”之后出现了第一个问题。我搜索这个问题,发现“矩阵[x][y]=zeile.charAt(x);” 应该是对的,但当我将任何数字写入新字符的第一个括号时,会抛出错误“NullPointerException”。 有人能解释一下并给出一些解决方案吗?谢谢:)

import java.io.*;
类非本征
{
公共静态void main(字符串[]args)引发IOException
{
FileReader fr=新的FileReader(“Level4.txt”);
BufferedReader br=新的BufferedReader(fr);
字符串zeile=br.readLine();
字符[]矩阵=新字符[];
while(zeile!=null)
{
int y=0;
对于(int x=0;x
初始化矩阵(char[][]),但从不初始化任何入站数组。这将导致NullPointerException


此外,您的“while”条件看起来无效,似乎您只是在这里读取文件的第一行>您的代码将永远不会完成并反复读取第一行

数组作为块存储在内存中以实现O(1)操作,这就是为什么您需要在定义期间定义其大小。如果您坚持使用数组(而不是动态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);
   }
}
List line=new ArrayList();
字符串zeile=null;
int max=0;
而((zeile=br.readLine())!=null){
行。添加(zeile);
如果(zeile.length()>最大值)
max=zeile.length();
}
char[][]矩阵=新字符[lines.length()][max];
//填充矩阵:
对于(int i=0;i

请注意,由于
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();
   }    
}
import java.io.*;
导入java.util.ArrayList;
类非本征
{
公共静态void main(字符串[]args)引发IOException
{
FileReader fr=新的FileReader(“Level4.txt”);
BufferedReader br=新的BufferedReader(fr);
ArrayList行=新的ArrayList();
字符串zeile=null;
int max=0;
而((zeile=br.readLine())!=null){
行。添加(zeile);
如果(zeile.length()>最大值)
max=zeile.length();
}
char[][]矩阵=新字符[lines.size()][max];
对于(int i=0;i
您的代码正在创建一个无限循环,因为您没有从
br
循环中的任何位置读取
zeile
。您对
矩阵
的初始化无效。您必须在初始化阵列时增加容量。
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();
   }    
}