Java 将文本文件读入流中并将其拆分

我想用流读取文本文件并将其保存到数组中。


假设我的文本文件看起来像这样


; Kommentar

G40 K88 F32

H38

; noch ein Kommentar

B55

H33 K34 Bla77


现在我想要一个看起来像这样的数组或数组列表


G40

K88

F32

H38

B55

H33

K34

Bla77

所以我想删除以“;”开头的行 并在一个空格后拆分其他所有内容。


我像这样尝试:


 List<String> list = new ArrayList<>();


    try (Stream<String> stream = Files.lines(Paths.get(path))) {



        list = stream

                .filter(line -> !line.startsWith(";"))

        //  .map(string -> list.split(" "))

                .map(String::toUpperCase)

                .collect(Collectors.toList());


    } catch (IOException e) {

        e.printStackTrace();

    }


    list.forEach(System.out::println);

打印:


G40 K88 F32

H38

B55

H33 K34 BLA77

使用函数 .map(string -> list.split(" ")) 我会得到这个错误 The method split(String) is undefined for the type List<String>


我是 Java 新手,经过数小时的搜索,我找不到答案。希望这里有人能给我一个提示。谢谢


米琪卡哇伊
浏览 231回答 3
3回答

哈士奇WWW

要分割线并创建包含其元素的流,请使用line -> Stream.of(line.split("\\s+"))//OR&nbsp;//line -> Arrays.stream(line.split("\\s+"))这个 lambda 创建了Stream<String>但是如果我们将它与maplike 一起使用map(line -> Stream.of(line.split("\\s+")))我们会得到Stream<Stream<String>>。这不是我们想要的,因为我们不想“迭代”流,而是“迭代”它的元素。所以我们想要“扁平化”这个结构来得到Stream<String>.这可以通过flatMap(line -> Stream.of(line.split("\\s+")))

慕运维8079593

对于多合一的解决方案,请尝试:Files.lines(Paths.get("your/file/path"))&nbsp; &nbsp; &nbsp;.filter(l -> !l.startsWith(";"))&nbsp; &nbsp; &nbsp;.flatMap(l -> Arrays.stream(l.split("\n")))&nbsp; &nbsp; &nbsp;.forEach(System.out::println);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java