如何将文本文件转换为多维字符串数组

时间:2015-10-19 20:38:41

标签: java multidimensional-array processing

这是我的示例文本文件:

128_1   128_2   128_3   128_4   128_5   128_6   128_7   128_8
256_1   256_2   256_3   256_4   256_5   256_6   256_7   256_8
512_1   512_2   512_3   512_4   512_5   512_6   512_7   512_8

我正在尝试将此文本文件转换为2d字符串数组,但无法正确使用它。我最终得到了Null值。

这是我运行时代码的输出:

128_1 128_2 128_3 128_4 128_5 128_6 128_7 128_8
256_1 256_2 256_3 256_4 256_5 256_6 256_7 256_8
512_1 512_2 512_3 512_4 512_5 512_6 512_7 512_8
null null null null null null null null
null null null null null null null null
null null null null null null null null
null null null null null null null null
null null null null null null null null

这是我到目前为止所做的:

String[][] multi() {

  String[][] tobeReturned = null;
  BufferedReader reader = createReader("/numbers/_output.txt");

  String line;
  int row = 0;
  int size = 0;

  try {
    while ((line = reader.readLine()) != null) {
      String[] vals = line.trim().split("\t");

      if (tobeReturned == null) {
        size = vals.length;
        tobeReturned = new String[size][size];
        //println(size);
      }

      for (int col = 0; col < size; col++) {
        tobeReturned[row][col] = vals[col];
      }

      row++;     

      //println(row);
    }
  }
  catch(IOException e) {
  }

  for (String[] arr : tobeReturned) {
    println(arr);
  }

  return tobeReturned;
}

2 个答案:

答案 0 :(得分:0)

如前所述,你的尺码错误。你知道文件的大小,所以试试这个:

 row=0;
 tobeReturned = new String[3][8];
 while ((line = reader.readLine()) != null) {
  String[] vals = line.trim().split("\t");
  for (int col = 0; col < 8; col++) {
   tobeReturned[row][col] = vals[col];
 }
 row++;  
 }
 for(i=0; i<3; i++){
  for(j=0;j<8; j++){
   printlin(tobeReturned[i][j];
  }
 }   

答案 1 :(得分:-2)

字符串数组创建错误。

tobeReturned = new String[size][size];

这应该像

tobeReturned = new String[row][col];

因为,首先,您没有计算有多少行,所以您创建了一个列长度的方阵。

如果你真的需要使用String[][],你也应该计算一下。

如果您使用的是Java 8,我建议您使用以下实现:

public static String[][] strMatrix(String filePath) throws IOException {
        Stream<String> lines = Files.lines(Paths.get(filePath));
        String[][] strMat = lines.map(line -> line.split("\\s+")).toArray(String[][]::new);
        return strMat;
    }