из архива в архив, из массива в массив [] - PullRequest
0 голосов
/ 21 июля 2011

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

1 1 0 0
1 2 0 0
1 0 1 0
1 0 2 0
1 0 0 1
1 0 0 2
2 1 0 0
2 2 0 0
2 0 1 0
2 0 2 0
2 0 0 1
2 0 0 2

тогда я положил содержимое в массив. результат будет таким же, как в файле. затем я хочу обработать данные 1 на 1 и поместить каждую строку содержимого в массив [] [], где данные будут разделены на строки. результат будет таким:

output[0][]={1 1 0 0}
output[1][]={1 2 0 0}
output[2][]={1 0 1 0}
output[3][]={1 0 2 0}
....
....
....

вопрос, Как я могу взять строку в Arraylist, чтобы стать отдельными данными? я кодирую в Java

спасибо

Ответы [ 4 ]

1 голос
/ 21 июля 2011

Вы можете использовать метод public String [] split (String regexp), чтобы разделить строку в массив, указав символ, по которому вы разделяете аргумент. например, String temp = "1 2 3 4"; temp.split (""); в вашем случае вы разделитесь пробелом.

1 голос
/ 21 июля 2011

Как уже говорилось @Benoit, вы можете разбить каждую строку, используя String#split(regex), например:

String line = ...;
String[] parts = line.split( "\\s+" ); //split on whitespace

Обратите внимание, что начальный пробел может привести к появлению пустых строк в начале, то есть "1 2 3 4" приведет к {"", "1", "2", "3", "4"}. Вы также можете использовать класс Apache Commons Lang StringUtils, чей метод split(...) позаботится об этом.

Также обратите внимание на выражение \s+, которое также разбито на несколько пробелов, то есть «1 2 3 4» все равно приведет к {"1", "2", "3", "4"}.

Затем вы можете анализировать отдельные части как целые числа и т. Д.

0 голосов
/ 21 июля 2011

Вот некоторый действительно простой код, который выполняет всю работу в несколько строк с использованием сканеров и обрабатывает любое количество чисел в строке.

РЕДАКТИРОВАНИЕ: Обратите внимание, тип возврата List<List<Integer>> выбран для здравого смысла более int[][]

public static List<List<Integer>> parseIntArrays(InputStream in) {
    Scanner s = new Scanner(in);
    List<List<Integer>> list = new ArrayList<List<Integer>>();
    while (s.hasNextLine()) {
        Scanner ns = new Scanner(s.nextLine());
        List<Integer> nums = new ArrayList<Integer>();
        list.add(nums);
        while (ns.hasNextInt())
            nums.add(ns.nextInt());
    }
    return list;
}

Вот некоторый тестовый код для выполнения удовольствия:

public static void main(String[] args) {
    String input = "1 0 0\n1 2 0 0\n1 0 1 0\n1 0 2 0 0 0 1\n1";
    List<List<Integer>> result = parseIntArrays(new ByteArrayInputStream(input.getBytes()));

    for (List<Integer> line : result)
        System.out.println(line);
}

Выход:

[1, 0, 0]
[1, 2, 0, 0]
[1, 0, 1, 0]
[1, 0, 2, 0, 0, 0, 1]
[1]
0 голосов
/ 21 июля 2011

Вопрос: почему вы используете двумерный массив для хранения данных?Разобрать файл по новой строке.Для каждой новой строки добавьте эту строку в список массивов.Для каждого элемента в списке массивов просто добавьте его в массив.Я написал простую программу.Предполагается, что вы уже проанализировали файл и заполнили ArrayList новыми строками.

public static void main(String[] args) {
     List<String> list = new ArrayList<String>();
     list.add("1 0 1 1");
     list.add("1 1 1 1");
             // etc

     String[][] array = new String[list.size()][list.size()];
     int i = 0;
     for (String s : list) {
         stringArray[i++][0] = s;
     }

     for (int y = 0 ; y < array.length; y++) {
         System.out.println(stringArray[y][0]);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...