有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我需要从文本文件中读取一个三位数的序列,对应于行、列和值,并将其读入2D数组

第1位=行

第二位=列

第三位=数值

以下是文件中的内容:

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) 个答案

  1. # 1 楼答案

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

    第一步:将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. # 2 楼答案

    假设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();
    

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

  3. # 3 楼答案

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

    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;
    }
    
  4. # 4 楼答案

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

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

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