У меня есть текстовый файл, который выглядит так:
1, 0, 0, 1, 1
1, 1, 1, 1, 0
0, 0, 1, 1, 1
1, 1, 1, 1, 1
0, 0, 0, 1, 0
Мне нужно получить следующий вывод массива 2d:
{1, 0, 0, 1, 1}
{1, 1, 1, 1, 0}
{0, 0, 1, 1, 1}
{1, 1, 1, 1, 1}
{0, 0, 0, 1, 0}
В основном мне нужно, чтобы мой вывод был double DATA[][], как в этом примере
double [][] DATA = new double [][]{
{1, 0, 0, 1, 1},
{1, 1, 1, 1, 0},
{0, 0, 1, 1, 1},
{1, 1, 1, 1, 1},
{0, 0, 0, 1, 0}
};
Есть идеи, как это сделать? Вот что я пробовал:
ArrayList<String[]> listOfLines = new ArrayList<String[]>();
String line = bufReader.readLine();
while (line != null) {
String[] fields = line.split(",");
listOfLines.add(fields);
line = bufReader.readLine();
// System.out.println(line);
}
for (String[] DATA : listOfLines) {
System.out.println(Arrays.toString(DATA));
}




Мне кажется, что вместо того, чтобы создавать массив строк, вы могли бы использовать метод Double.parseDouble(String x). Например (не проверено, но вы должны уловить идею):
while (line != null) {
String[] fields = line.split(",");
ArrayList<Double> parsedFields = new ArrayList<Double>();
for (String x : fields) {
parsedFields.add(Double.parseDouble(x));
}
line = bufReader.readLine();
listOfLines.add(parsedFields); // you'll have to change listOfLines' type;
}
После этого, если вы хотите создать традиционный 2D-массив, сначала мы хотим выяснить размеры создаваемого массива. Примечание: вы, вероятно, захотите включить какую-либо проверку ошибок (т.е. убедитесь, что каждая строка имеет одинаковое количество значений, пустых и т. д.). Зная размеры массива, вам просто нужно будет выполнить итерацию и поместить значения в массив, примерно так:
int rows = listOfLines.size();
int cols = listOfLines.get(0).size(); // this will fail if there is nothing in listOfLines!
Double[][] output = new Double[rows][cols];
for (int i = 0; i<rows; i++) {
for (int j = 0; j<cols; j++ {
output[i][j] = listOfLines.get(i).get(j);
}
}
ОТВЕТЬ НА МОЙ ВОПРОС:
BufferedReader bufReader = new BufferedReader(new FileReader("//C://...."));
List<String> listOfLines = new ArrayList<>();
String line;
while ((line = bufReader.readLine()) != null) {
listOfLines.add(line);
}
double[][] output = new double[listOfLines.size()][];
for (int i = 0; i < listOfLines.size(); i++) {
final String currentString = listOfLines.get(i);
final String[] split = currentString.split(",");
output[i] = new double[split.length];
for (int j = 0; j < split.length; j++) {
output[i][j] = Double.parseDouble(split[j]);
}
}
System.out.println(Arrays.deepToString(output));
Спасибо, Патрик. Это было очень полезно. Наконец мой код заработал!