Разобрать файл и разбить отдельные строки на 2d массив - PullRequest
0 голосов
/ 17 мая 2019

У меня есть один текстовый файл, в котором каждая строка содержит одну строку чисел, скажем, 203, и у меня есть один 2d массив int puzzle[][].

Строки файла находятся в списке массивов Arraylist<String> строк.первая строка из списка массивов переходит в головоломку [0]. вторая строка переходит в головоломку [1] и т. д.

У меня проблема в том, что после разбиения строк я не могу преобразовать эти числа в целые числапотому что это дает мне исключение числового формата для -1, что если я разделю это - и на 1.

Я попробовал следующее, а также сделал глубокую копию массива строк и затем преобразовал каждую строку в целое число

public void parseFile(ArrayList<String> lines)
  {

     ArrayList<String> l = lines;
     for(int i =0; i<puzzle.length; i++)
         puzzle[i][0] = Integer.parseInt(l.get(i).split(""));
 }

это должно дать мне 2d массив с целыми числами

1 Ответ

0 голосов
/ 17 мая 2019

Вот метод, который возьмет список строк, состоящих из однозначных чисел, и преобразует список в 2d массив int.Этот код не использует потоки Java 8.

public static int[][] parseFile(List<String> lines) {
    int[][] result = new int[lines.size()][];

    int multiplier = 1;
    int counter = 0;
    for (String line : lines) {
        List<Integer> row = new ArrayList<>();
        for (int i = 0; i < line.length(); i++) {
            char c = line.charAt(i);
            if (c == '-') {
                multiplier = -1;
                continue;
            } 
            int n = (int)c - 48; 
            row.add(n * multiplier);
            multiplier = 1;
        }
        int[] rowArray = new int[row.size()];
        for (int j = 0; j < row.size(); j++) {
            rowArray[j] = row.get(j);
        }
        result[counter] = rowArray;
        counter++;
    }
    return result;
}

Ниже приведен мой тестовый код, выполняемый с основного

List<String> list = new ArrayList<>();
list.add("-111");
list.add("2-13");

int[][] result = parseFile(list);
for (int i = 0; i < result.length; i++) {
    for (int j = 0; j < result[i].length; j++) {
        System.out.printf("%d ", result[i][j]);
    }
    System.out.print("\n");
}

Вывод

-1 11
2 -1 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...