Разделить вход дважды - PullRequest
       9

Разделить вход дважды

0 голосов
/ 17 сентября 2018

В данный момент у меня возникла проблема со списком.Список выглядит так:

a b c d
a d
a c
d b
...

Первая строка - это индекс, который удаляется после его использования.Остальное понадобится позже.

while ((strLine = br.readLine()) != null)   {
line.add(strLine);
}
//...
line.remove(0);

Таким образом создается список («строка»).Теперь я хочу снова разделить список, убрав пробелы.

Любая помощь будет принята с благодарностью!Заранее спасибо!

Ответы [ 5 ]

0 голосов
/ 17 сентября 2018

Java 8 (функциональная) версия:

Files.lines(Paths.get(filename), StandardCharsets.ISO_8859_1)
        .flatMap(x -> Arrays.stream(x.split("\\s+")))
        .collect(toList()));
// or if your data set is large and you don't really need it all in one list:
//      .forEach(doSomethingUsefulWithEachIndividualWord);
0 голосов
/ 17 сентября 2018
String[] strArray = new String[letters.size()];

    strArray = letters.toArray(strArray);

    letters.clear();

    for(String A:strArray) {
        String[] arrOfStr = A.split(" "); 
        for(String B:arrOfStr) {
            letters.add(B);
        }
    }

Вывод будет выглядеть так

[a, b, c, d, a, d, a, c, d, b]
0 голосов
/ 17 сентября 2018

Разделите каждую строку и отфильтруйте пространство.Игнорировать первую строку в цикле:

boolean firstLine = true;
List<List<Character>> chars = new ArrayList<>();
while ((strLine = br.readLine()) != null) {
    if (firstLine) {
        firstLine = !firstLine;
        continue;
    }
    chars.add(strLine.chars().filter(e -> e != ' ').mapToObj(e -> (char) e).collect(Collectors.toList()));
}

Символы содержат вывод: [['a', 'b'], ['c', 'd']]

0 голосов
/ 17 сентября 2018

Если я правильно понимаю в комментариях, вы хотите следующий ввод:

a b c d
a d
a c
d b
c a

Чтобы стать следующими двумя списками (с игнорированием первой строки ввода):

List 1: [a, a, d, c]    (the characters in the first column)
List 2: [d, c, b, a]    (the characters in the second column)

Поскольку у вас уже есть часть этого (размещение строк ввода в списке и удаление первой), я просто продолжу оттуда:

List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
for(String line : lines){
  String[] splitLine = line.split(" ");
  list1.add(splitLine[0]);
  list2.add(splitLine[1]);
}

Это разбивает каждую строку на пробели помещает первые символы в первый список, а вторые во второй список.

Попробуйте онлайн.

Если вы действительновам нужно два массива вместо списков, вы можете сделать что-то вроде этого:

int amountOfLines = lines.size();
String[] array1 = new String[amountOfLines];
String[] array2 = new String[amountOfLines];
for(int i = 0; i < amountOfLines; i++){
  String[] splitLine = lines.get(i).split(" ");
  array1[i] = splitLine[0];
  array2[i] = splitLine[1];
}

Попробуйте онлайн.

0 голосов
/ 17 сентября 2018

Как вы упомянули в комментариях, вам нужно

['a', 'b', 'c', 'd', 'a', 'd', ...] 

этот список, если ввод такой:

a b c d
a d
a c
d b
...

Итак, вы выяснили, как этого добиться:

["a b c d", "a d", "a c", "d b", ...] 

Я расскажу вам дальнейшие шаги. Пусть этот список будет lines.

Теперь выполните цикл по всем элементам lines, а затем цикл по каждому символу этого элемента и сохраните необходимую информацию в другом List.

for (String line: lines) {
    for (char chr: line) {
        if (chr == ' ') {
            continue;
        } else {
            characters.add(chr);
        }
    }
}

Теперь ваш characters список будет выглядеть так

['a', 'b', 'c', 'd', 'a', 'd', ...]
...