【问题标题】:Convert a txt file to a String[][]将 txt 文件转换为 String[][]
【发布时间】:2021-12-24 21:28:17
【问题描述】:

几天来我一直在尝试将文件转换为字符串 [] [],但仍然出现错误。我不知道如何继续。

    String[][] lecture_tab;

    public void readLines() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("lvl1.txt"));

        int i = 0;
        while (i < 15) {
            for (String line; (line = br.readLine()) != null; ) {
                System.out.println(line);
                this.lecture_tab[i] = line;
                i += 1;
            }
        }
        System.out.println(lecture_tab);
    }

文本文件如下所示:

###################
###################
###################
###################
###################
###################
###################
###################
###################
###################
###################
###################
###################
###################
###################

/!\ 更新 /!\ : 听了你的建议后,我终于做了我想做的事。差不多,当我尝试显示我的矩阵时,只显示第一行,其他 14 行是空的......

public void readLines() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("lvl1.txt"));

        for (int i = 0; i < lecture_tab.length; i++) {
            for (String line; (line = br.readLine()) != null;) {
                for(int j = 0; j < 19; j++) {
                    this.lecture_tab[i][j] = line.charAt(j);
                }
            }
        }

        for (int i = 0; i < this.lecture_tab.length; i++) {
            for (int j = 0; j < this.lecture_tab[i].length; j++) {
                System.out.print(this.lecture_tab[i][j]);
            }
            System.out.println();
        }
    }

输出:

###################














【问题讨论】:

  • 将文件内容放入其中后,二维数组应该是什么样子?换句话说,为什么它是String[][] 而不是String[],其中数组的每个元素都是一行?第二个维度是干什么用的?
  • 感谢您的反馈@Federico klez Culloch,我想要String[][],因为我正在开发游戏,这就是我想使用矩阵的原因。必须选中每个框,例如:lecture_tab [x] [y]。
  • 不应该是char[][]吗?无论如何,您需要使用另一个 for 循环(从 0 到 line.length)循环遍历 line 中的每个字符,并且假设内部循环使用 j 作为索引,分配字符(单字符字符串?)到 Lecture_tab[i][j].
  • 如果您想在每个字符处分割行,那么只需执行lecture_tab[i] = line.split("");
  • 这能回答你的问题吗? Read text file into an array

标签: java arrays string list file


【解决方案1】:

问题是当你这样做时:

 this.lecture_tab[i] = line;

line 是一个字符串,this.lecture_tab[i] 是一个字符串[]。

如果你想在你的每个字符串中有一个单独的字符,你可以使用:


public void readLines() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("lvl1.txt"));

        int i = 0;
        while (i < 15) {
            for (String line; (line = br.readLine()) != null; ) {
                System.out.println(line);
                for(int j = 0; j < line.lenght(); j++) {
                     this.lecture_tab[i][j] = "" + line.charAt(j);
                }
                i += 1;
            }
        }
        System.out.println(lecture_tab);
    }

在这种情况下,我建议将 Lecture_tab 更改为 char 的二维数组 (char[][] lecture_tab;)

【讨论】:

  • 感谢您的反馈,这对我有很大帮助。一切似乎都奏效了,但是当我调用我的方法来显示我的矩阵时,它只显示第一行,其余为“null”public void readLines() throws IOException { BufferedReader br = new BufferedReader(new FileReader("lvl1.txt")); String line; for (int i = 0; i &lt; 15; i++) { while ((line = br.readLine()) != null) { for(int j = 0; j &lt; line.length(); j++) { this.lecture_tab[i][j] = line.charAt(j); } } } }
  • 对不起,我不知道如何正确添加评论...
【解决方案2】:

如果您希望每个“单元格”中的内容是单个字符,则可以使用字符数组。您还可以利用toCharArray(String) 方法进行转换。

你需要这样的东西:

    public static void main(String[] args) throws IOException {

        char[][] lecture_tab = new char[15][];
        BufferedReader br = new BufferedReader(new FileReader("lvl1.txt"));

        int i = 0;
        while (i < 15) {
            for (String line; (line = br.readLine()) != null; ) {
                System.out.println(line);
                lecture_tab[i] = line.toCharArray();
                i += 1;
            }
        }
        System.out.println(lecture_tab);
    }

【讨论】:

    【解决方案3】:

    你可以用这个:-

    BufferedReader abc = new BufferedReader(new FileReader(myfile));
    List<String> lines = new ArrayList<String>();
    
    while((String line = abc.readLine()) != null) {
        lines.add(line);
        System.out.println(data);
    }
    abc.close();
    
    // If you want to convert to a String[]
    String[] data = lines.toArray(new String[]{});
    

    【讨论】:

      猜你喜欢
      • 2017-11-03
      • 2017-02-09
      • 2017-09-23
      • 2014-06-11
      • 1970-01-01
      • 2019-08-29
      • 2016-10-02
      • 2015-12-11
      • 2020-01-08
      相关资源
      最近更新 更多