繁体   English   中英

如何在Java中将文件读取到2D数组中?

[英]how to read a file into a 2D array in java?

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

第一位=行

第二位数=栏

第三位数=值

这是文件中的内容:

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;
}

有谁知道我如何修改我的代码以读取文本文件中的三个数字?

谢谢您的帮助。

假设str包含四个数字:

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

不是超级表现,但易于理解。

为了确保str没有开头或结尾的whitespece,请提前执行以下操作:

str = str.trim();

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

在定义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 x > 9 || y > 9仍然有效。

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

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

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

假设所有信息显然都在一行中,并且始终相同(三位数字),则可以执行以下操作:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM