我有一个1302行的.txt文件,它平均分为14 x 93(对应14列和93行)。我想将1302行解析成[93][14]
多维数组。我有以下脚本遍历每个单独的“单元格”,但至于文件解析,我有一些问题。
int rows = 93;
int columns = 14;
int i;
int j;
int count = 0;
String[][] array = new String[rows][columns];
for(i = 0; i < rows; i++){
for(j = 0; j < columns; j++){
System.out.println(i + "," + j);
count++;
}
}
如何将文本文件的每个“行”分配到每个单元格?
答案 0 :(得分:1)
我的推荐(除了使用double[][]
更改为List<List<Double>>
之类的内容)将通过每个文本行:
InputStream fis;
BufferedReader br;
String line;
fis = new FileInputStream("the_file_name");
br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
while ((line = br.readLine()) != null) {
// Deal with the line
}
// Done with the file
br.close();
br = null;
fis = null;
有了这个,你应该能够得到每个人&#39; line&#39;的文件。我之前使用List<List<Double>>
代替double[][]
提到的原因是因为你得到了两件事:
1)动态调整大小。即使您知道尺寸并希望将该列表设置为默认大小以帮助提高性能,您也不会限制这个大小,这值得它在...中的重量?程序员黄金。
2)使用原始double(小写d)而不是Java对象Double(大写D)真的会杀死你,因为没有访问很多很好的方法和内置于Double(capitol D对象)的可用性。有关此问题的更多解释,请参阅:Double vs. double
另请注意,上面的代码没有错误检查,因此您希望将其中的一部分构建到其中,这是一个非常基本的实现。
修改::
好的,所以在您发布于code snipped的代码中,您有一个readLine()
循环的双循环INSIDE。像这样:
while ((line = br.readLine()) != null) {
for (int i = 0; i < rows; i++){
for(int j = 0; j< columns; j++){
line = array[i][j];
}
}
}
现在,有两个问题:
1)你将LINE设置为等于array [i] [j]的内容,这意味着什么,因为数组只是一个空的二维数组。
2)对于文本文件中的每一行,你循环1302次(然后再多一些,因为你正在做(1302 *列)* 1302
上面这段代码真正做的是,它会照顾你的行&#39;环。所以不要做你正在做的事情,而是做:
int i = 0;
while ((line = br.readLine()) != null) {
array[i][0] = line;
i++
}
将使用文件中的所有字符串填充数组。
答案 1 :(得分:0)
使用Scanner
或BufferedReader
读取行(行),然后使用split("\\s+");
将行拆分为标记(列)。然后在每个标记上使用Double.parseDouble()
,然后将其插入到数组中。
答案 2 :(得分:0)
为了将任何内容分配给2D矩阵,您可以执行以下操作:
for (int r=0; r<NUM_ROWS; r++)
for (int c=0; c<NUM_COLS; c++)
matrix[r][c] = get_line(r*NUM_COLS + c)
get_line(i)
将获取文件中的第i行