Используйте разделитель в arrayylist

У меня есть текстовый файл, который выглядит так:

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));
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
468
2

Ответы 2

Мне кажется, что вместо того, чтобы создавать массив строк, вы могли бы использовать метод 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);
    }
}

Спасибо, Патрик. Это было очень полезно. Наконец мой код заработал!

Anonymous 21.10.2018 14:37

ОТВЕТЬ НА МОЙ ВОПРОС:

     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));  

Другие вопросы по теме