【问题标题】:Text file to 2D array文本文件到二维数组
【发布时间】:2014-05-23 12:21:51
【问题描述】:

我正在逐行读取文本文件,现在我想将其排列在二维数组中,但我被卡住了。 这是代码:

BufferedReader bfr = new BufferedReader(new FileReader("Data.txt"));
        String line;
        while ((line = bfr.readLine()) != null) {

            System.out.println(line);
        }
            bfr.close();

所以我得到它来打印文本文件,但现在我想将它排列在一个二维数组中。 有什么帮助吗?

【问题讨论】:

  • 我没有看到任何尝试在您的代码中创建或填充数组。我们也不知道你想怎么填。
  • 排列什么?行/词?
  • 2D 数组意味着 char 的 2D 数组,对吗?字符[][]?

标签: java arrays bufferedreader


【解决方案1】:

java 中有一个很棒的类叫做 Scanner,它可以用于许多与流数据相关的事情。

File file = new File("data.txt");     
    try {
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            System.out.println(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

您可以将其用于文件。它将逐行读取。 在这里它正在打印,但将它存储在数组中就完成了!

【讨论】:

  • 只有在你真正需要的时候才使用Scanner。如果您只想逐行读取文件,则可以使用BufferedReader 或其他方式。 Scanner 真的非常慢。即使文件非常小(几千行),您也会立即意识到差异。
  • 好的,我会记住的。但是逻辑还是一样的。
  • 我也很喜欢 Scanner 的语法,但它真的很慢。
【解决方案2】:

尝试制作一个 ArrayList:

ArrayList<String> bob = new ArrayList<String>();

那么你可以简单地去:

bob.add(line);

然后打印出来,你可以去:

for(int x = 0; x < bob.length; x++) {
    System.out.println(bob[x]);
}

应该可以。 :)

【讨论】:

  • 不是bob[x]bob.length 使用arList.get(i)arList.size() 作为ArrayList:)
【解决方案3】:

文本到二维数组?很有趣也很常见。如上一个答案中所述,扫描仪可能很有用,但是您获取文本文件的方法很好;即使扫描仪可能具有更好的速度性能(进行一些研究。:P)

我解决这个问题的方法是在每个放置的图块(?)之间添加一个分隔符。示例:

1:1:1:1:1:1:1
1:0:1:0:0:0:1
1:0:0:0:1:0:1
1:1:1:1:1:1:1

这允许您抓取一条线,然后使用String.split(String delimiter) 方法将其拆分。正如 LouisDev 所说,扫描仪更好,所以我会使用它:

File file = new File("data.txt");     
try {
    Scanner scanner = new Scanner(file);
    int y = 0;
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        System.out.println(line);
        y++;
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

所以我们有自己的方式来获取该行并将其存储到我们的变量 y 中。这将在以下方法中使用,该方法显示了一种收集字符串中所有内容并将其存储到二维数组中的方法。实际上,这就是您问题的答案。

File file = new File("data.txt");     
try {
  Scanner scanner = new Scanner(file);
  int y = 0;
  int[][] map = new int[methodParsedHeight][methodParsedWidth];
  while(scanner.hasNextLine()) {
    String line = scanner.nextLine();
    String[] lineSplit = line.split(":");
    for(int x = 0; x < lineSplit.length; x++ {
      map[y][x] = Integer.parseInt(lineSplit[x]);
    }
    System.out.println(line);
    y++;
  }
  return map;
} catch(FileNotFoundException e) {
  e.printStackTrace();
}

这应该有效地解决发生的问题。如果没有,请给我们评论!

贾罗德。

【讨论】:

  • 方法parseheight和width是什么?
  • 假设最后的代码块被放到了一个方法(或构造函数)中。作为该方法的参数,它应该是public int[][] getMap(int width, int height)。显然现在,methodParsedWidth 现在只是 widthmethodParsedHeight 相同;现在变成height。 - 解决问题是程序员需要的技能。这几乎不是一个解决问题的问题。我希望这是你自己的数字......
猜你喜欢
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多