我需要从文本文件创建一个2D数组,以便以后在某些操作中使用。
这是我的文件以空格分隔“:
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
这是我的代码:
import java.io.*;
public class TxtToArray{
public static void main(String args[]){
double[][] array = new double[100][100];
int x=0, y=0;
try{
BufferedReader in = new BufferedReader(new FileReader("E:\\Documents\\JavaPrograms\\TxtToArray\\src\\Array.txt"));
String bar;
while ((bar = in.readLine()) != null){
String[] values = bar.split(" ");
for (String str : values){
double str_double = Double.parseDouble(str);
array[x][y]=str_double;
y++;
}
x++;
}
in.close();
}catch( IOException ioException ) {
System.out.println("Something happened...");
}
}
}
谢谢!寻求帮助
修改 我已经纠正了解释和代码语法中的一些错误。如果有更多让我知道。
答案 0 :(得分:1)
你从来没有告诉我们问题是什么,但我看到的一个问题就是你只是在逗号上拆分每一行输入。这不会起作用,因为您的输入数据也使用空间作为分隔符。一个选项是在用逗号分割前删除此空格:
while ((bar = in.readLine()) != null) {
String[] values = bar.replaceAll("\\s+", "")
.split(",");
for (int y=0; y < values.length; ++y) {
double str_double = Double.parseDouble(values[y]);
array[x][y] = str_double;
}
x++;
}
您会注意到我使用for
循环来迭代每个输入中的字符串。这是一个不错的选择,因为它不需要您管理数组的第二个索引。
答案 1 :(得分:0)
文件中的数字不仅由,
分隔,还由空格分隔。如果参数中包含此空格,则Double.parseDouble
会抛出异常。因此,您需要使用也匹配这些字符的正则表达式,例如,\s*
。您还需要在y
循环的每次迭代开始时将while
设置回0:
while ((bar = in.readLine()) != null){
String[] values = bar.split(",\\s*");
y = 0;
for (String str : values){
double str_double = Double.parseDouble(str);
array[x][y] = str_double;
y++;
}
x++;
}