为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2021-06-01 16:12:14
我想用流读取文本文件并将其保存到数组中。假设我的文本文件看起来像这样; KommentarG40 K88 F32H38; noch ein KommentarB55H33 K34 Bla77现在我想要一个看起来像这样的数组或数组列表G40K88F32H38B55H33K34Bla77所以我想删除以“;”开头的行 并在一个空格后拆分其他所有内容。我像这样尝试: 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 F32H38B55H33 K34 BLA77使用函数 .map(string -> list.split(" ")) 我会得到这个错误 The method split(String) is undefined for the type List<String>我是 Java 新手,经过数小时的搜索,我找不到答案。希望这里有人能给我一个提示。谢谢
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

要分割线并创建包含其元素的流,请使用


line -> Stream.of(line.split("\\s+"))

//OR 

//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+")))


查看完整回答
反对 回复 2021-06-02
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

对于多合一的解决方案,请尝试:


Files.lines(Paths.get("your/file/path"))

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

     .flatMap(l -> Arrays.stream(l.split("\n")))

     .forEach(System.out::println);


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 229 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信