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

借助流从文件名中删除扩展名

借助流从文件名中删除扩展名

慕桂英3389331 2022-05-25 17:28:16
目前我有一些代码返回我的文件名和扩展名,为此我正在使用 java 8 流 api。但我也想在同一个流中修剪字符串。return Files.walk(Paths.get(qPath))                       .filter(extension -> extension.toString().endsWith(".txt"))                       .map(Path::getFileName)                       .findFirst()                       .map(Path::toString)                       .get();知道如何从流中的字符串中删除 .txt 吗?
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您通过多次将路径转换为字符串来浪费资源。当预期的最终结果无论如何都是一个字符串时,您可以作为第一步映射到一个字符串,因此您不需要重复它。

return Files.walk(Paths.get(qPath))
    .map(p -> p.getFileName().toString())
    .filter(name -> name.endsWith(".txt"))
    .map(name -> name.substring(0, name.length()-".txt".length()))
    .findFirst()
    .get();

请注意,无论您是将最后.map(…)一步findFirst()放在Optional. 由于 Stream 的惰性,它仍然只会应用于这里的第一个匹配元素。但我更喜欢将.endsWith(".txt")测试和后续测试.substring(0, name.length()-".txt".length())尽可能地放在一起,以使这两个步骤之间的关系更加明显。


查看完整回答
反对 回复 2022-05-25
?
米琪卡哇伊

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

您可以添加其他地图以删除文件扩展名 -

Files.walk(Paths.get(""))
        .filter(extension -> extension.toString().endsWith(".txt"))
        .map(Path::getFileName)
        .findFirst()
        .map(Path::toString)
        .map(fileNameStr -> fileNameStr.substring(0, fileNameStr.lastIndexOf('.'))
        .get();

或者修改当前地图这样做 -

Files.walk(Paths.get(""))
        .filter(extension -> extension.toString().endsWith(".txt"))
        .map(Path::getFileName)
        .findFirst()
        .map(path -> path.getFileName().toString().substring(0, path.getFileName().toString().lastIndexOf('.')))
        .get();


查看完整回答
反对 回复 2022-05-25
?
守着星空守着你

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

如果要使用流,则仅删除扩展名是不值得的。使用类似下面的东西,但它也有一些缺点,比如dd.txt.txtwill fetch dd.txt

String trimmedString = str.substring(0, str.lastIndexOf('.'));


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号