如何在java中将文件读入2D数组?

时间:2016-05-23 18:45:54

标签: java arrays multidimensional-array

我需要读取一个三位数的序列,对应于行,列和值,从文本文件到2D数组。

第一位=行

第二位=列

第3位=值

以下是文件中的内容:

014 023 037 040 050 069 070 088 100 110 125 130 143 150 160 170 180 200 211 220 230 240 250 263 270 280 306 310 320 330 342 357 360 370 380 404 410 427 430 440 450 461 470 483 500 510 520 535 544 550 560 570 589 600 610 622 630 640 650 661 670 683 700 710 720 730 745 750 764 770 780 805 810 824 830 840 851 862 876 880 

出于学习目的,我能够创建在文本文件采用这种格式时可以工作的代码(类似于最终数组的样子)

0 4 3 7 0 0 9 0 8
0 0 5 0 3 0 0 0 0
0 1 0 0 0 0 3 0 0
6 0 0 0 2 7 0 0 0
4 0 7 0 0 0 1 0 3
0 0 0 5 4 0 0 0 9
0 0 2 0 0 0 1 0 3
0 0 0 0 5 0 4 0 0
5 0 4 0 0 1 2 6 0

但无法确定如何使其与3位数一起使用:

这是我到目前为止的代码:

public final int[][] chargerJeu(String nomFichier){
    try {   
        File unfichier = new File (nomFichier);
        BufferedReader entree = new BufferedReader(new FileReader(unfichier));
        String ligne;
        int x = 0;
        int y = 0;
        while ((ligne = entree.readLine()) != null)  //file reading
        {
            String[] values = ligne.split(" ");
            for (String str : values)
            {
                int z = Integer.parseInt(str);
                grille[x][y]=z;
                y=y+1;
            }
            x=x+1;
            y=0;
        }
        entree.close();
    }catch (FileNotFoundException e){
        System.out.println ("Erreur, fichier inexistant!");
    }catch (IOException e){
        System.out.println ("Erreur d'ecriture : " + e.getMessage());
    }
    return grille;
}

有人知道如何调整我的代码来读取文本文件中的三位数字吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

假设str包含四位数字:

x = Integer.parseInt(str.substring(0,1));
y = Integer.parseInt(str.substring(1,2));
z = Integer.parseInt(str.substring(2,3));

不是超级高效但易于理解。

为了确保str没有领先或尾随白色,请提前执行此操作:

str = str.trim();

我还建议进行一些错误检查:字符串可能有多于或少于三位数。它也可能包含非数字字符。

答案 1 :(得分:0)

在定义int z = Integer.parseInt(str)之前,我们必须先将valuestr

分开

步骤1:获取x的长度,并将y作为字符串:

int xLen = Integer.toString(x).length();
int yLen = Integer.toString(y).length();

现在我们知道str.substring((xLen-1)+(yLen-1), str.length())将是您正在寻找的价值。所以z = Integer.parseInt(str.substring((xLen-1)+(yLen-1), str.length()));此解决方案适用于可能具有"双位数字的数组。索引。因此,如果x > 9 || y > 9这仍然有用。

答案 2 :(得分:0)

将字符串转换为int后,可以执行此操作:

    x = z / 100;
    z -= 100 * x;
    y = z / 10;
    z -= y * 10;        

您应该能够保持代码不变,只是不要在循环中增加x和y。

答案 3 :(得分:0)

假设显然所有信息都在一行中,并且总是相同(三位数),您可以这样做:

for (String str : values) {
  char[] c = str.toCharArray();
  int x = Character.getNumericValue(c[0]);
  int y = Character.getNumericValue(c[1]);
  int z = Character.getNumericValue(c[2]);
  grille[x][y] = z;
}