首页 > 解决方案 > 将多维数组保存到文本文件中添加额外的列

问题描述

我有一个任务需要我将一个带有double值的数组传递到 Java 中的文本文件中。我用于BufferedWriter此任务,但问题是我在文本文件中获得了零值的额外列。

例如,如果我尝试将以下数据写入文本文件:

1.0, 2.0, 3.0
2.0, 1.0, 1.0
3.0, 2.0, 2.0

我得到以下结果:

1.0,2.0,3.0
2.0,1.0,1.0
3.0,2.0,2.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0
0.0,0.0,0.0

这是我使用的代码:

ArrayList<String> list = new ArrayList<String>();
    File file1 = new File("file.txt"); 
        Scanner sc  = null;    
        sc = new Scanner( file1);        
        String  line = "";
        int maxLen = 0;
        while(sc.hasNextLine()){
            line = sc.nextLine();
            list.add(line);
            if(line.length() > maxLen)
                maxLen = line.length(); 
        }
        System.out.println(list); 
        int rows = maxLen;
        int col = list.size();
        double arr[][] = new double[rows][col];
        rows = 0; 
        for(int i=0;i<col;i++)
        {
            String s = list.get(i); 
            String []values = s.split(", "); 
            if(rows < values.length)
                rows = values.length; 
            for(int j=0;j<values.length;j++)
            {
                if (!values[j].isEmpty()) {
                arr[j][i] = Double.parseDouble(values[j]);

                }
                }
        }
        for(int i=0;i<rows;i++)
        {
            for(int j=0;j<col;j++)
            {
                System.out.print(arr[i][j]+", ");// displaying numbers

            }
            System.out.println();

        }

File filename = new File("FinalTopFeatures1.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(filename));

for (int i = 0; i < arr.length; i++) {
   for (int j = 0; j < arr[i].length; j++) {
      bw.write(arr[i][j] + ((j == arr[i].length-1) ? "" : ","));
   }
   bw.newLine();
}
bw.close();

标签: javamatrixtext-files

解决方案


检查数组的长度 ( arr.length)。它正在写入包含零值的整个数组。如果您不想写入所有零值,那么:您可以减小 arr 大小或仅针对包含数据的行数迭代 for 循环。假设您的情况只有 3 行包含数据。所以:

for (int i = 0; i < rows; i++) {
   for (int j = 0; j < col; j++) {
      bw.write(arr[i][j] + ((j == col-1) ? "" : ","));
   }
   bw.newLine();
}

推荐阅读