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

如何从 url 中过滤 txt

如何从 url 中过滤 txt

月关宝盒 2022-10-20 15:09:43
我需要找到以“c”开头并以给定日期结尾的所需行。例如:我想找到 2019-02-05 所以该行看起来像:c025z190205。所以我唯一知道的是cand date。这只是一个例子,所以我可以输入任何日期,它应该打印我这个特定的行。文本文件如下所示:我已经在里面了BufferedReader。我不知道我是否应该regex或什么,如果是,那么它会是什么样子?try {                String DIR_SOURCE = "http://www.nbp.pl/kursy/xml/dir.txt";                URL url = new URL(DIR_SOURCE);                URLConnection con = url.openConnection();                InputStream is = con.getInputStream();                BufferedReader br = new BufferedReader(new InputStreamReader(is));            } catch (Exception e) {                e.printStackTrace();            }
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

您可以使用 Java Stream API 过滤行并为要查找的行生成正则表达式:


URL url = new URL("http://www.nbp.pl/kursy/xml/dir.txt");

URLConnection conn = url.openConnection();

Pattern identifier = getIdentifier("c", LocalDate.of(2019, Month.FEBRUARY, 5));

try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {

    reader.lines()

            .filter(line -> identifier.matcher(line).matches())

            .forEach(System.out::println);

}

此示例使用LocalDate,但您可以轻松地将其更改为字符串,或者您喜欢的其他内容。该getIdentifier()方法可能如下所示:


private Pattern getIdentifier(String start, LocalDate date) {

    return Pattern.compile(start + ".*" + date.format(DateTimeFormatter.ofPattern("YYMMdd")));

}

您的示例的模式是c.*190205.


查看完整回答
反对 回复 2022-10-20
?
慕哥9229398

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

如果您正在寻找特定日期,那么您知道如何构建字符串的开头,因此您可以执行以下操作:


String stringToFind = buildString(date);

String line;

while ((line = br.readLine()) != null) {

  if (line.startsWith(stringToFind)) {

    // do something...


    break;

  }

}


查看完整回答
反对 回复 2022-10-20
?
温温酱

TA贡献1752条经验 获得超4个赞

利用:

Pattern pattern = Pattern.compile("^c(.)*[0-9]{6}$");


查看完整回答
反对 回复 2022-10-20
  • 3 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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