将输入分割两次

时间:2018-09-17 13:22:08

标签: java list split

我目前在列表上遇到问题。 列表看起来像这样

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

第一行是一个索引,使用后将被删除。其余的将在以后使用。

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

通过这种方式创建列表(“行”)。 现在,我想通过删除空格再次拆分列表。

任何帮助将不胜感激! 预先谢谢你!

5 个答案:

答案 0 :(得分:0)

如您在评论中所述,您需要

['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', ...]

答案 1 :(得分:0)

分割每行和过滤器空间。忽略循环中的第一行:

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

Chars包含以下输出:[['a','b'],['c','d']]

答案 2 :(得分:0)

如果我在评论中正确理解,则需要以下输入:

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

这将每行按空格分开,并将第一个字符放在第一个列表中,第二个字符放在第二个列表中。

Try it online.

如果您确实需要两个数组而不是列表,则可以执行以下操作:

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];
}

Try it online.

答案 3 :(得分:0)

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]

答案 4 :(得分:0)

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