猿问

如何从 url 中过滤 txt

我需要找到以“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();

            }


月关宝盒
浏览 192回答 3
3回答

撒科打诨

您可以使用 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.

慕哥9229398

如果您正在寻找特定日期,那么您知道如何构建字符串的开头,因此您可以执行以下操作:String stringToFind = buildString(date);String line;while ((line = br.readLine()) != null) {  if (line.startsWith(stringToFind)) {    // do something...    break;  }}

温温酱

利用:Pattern pattern = Pattern.compile("^c(.)*[0-9]{6}$");
随时随地看视频慕课网APP

相关分类

Java
我要回答