首页 > 解决方案 > 如何使用java从特定行开始读取TextFile

问题描述

我想从特定行开始读取 TextFile 我有一个像这样的文本文件

        #11
        mango
        apple
        orange
        END
        #22
        dog
        cat
        monkey
        END
        #33
        car
        bus
        van
        END

在这里我想得到#22和END之间的所有行

      String text = new String(Files.readAllBytes(Paths.get("mypath")), 
      StandardCharsets.UTF_8);
      //multiple lines to single line
      text=text.replaceAll("[\r\n]+", " "); 
      Pattern pattern = Pattern.compile("#22(.*?)END");
      Matcher matcher = pattern.matcher(text);
      while (matcher.find()) {
          System.out.println(matcher.group(1));
      }

它在一行中提供输出(狗猫钱)。如何从文件中仅获取以下行(逐行)

                dog
                cat
                monkey

我不确定特定数字(#22)之后是什么数字。例如,#33 是。仅使用 #22 和 END(在 #33 之前)的任何方法

标签: javaregexstringfile

解决方案


要匹配最后一个 END,您需要使用$像 which mean end of file 这样的锚点"#22(.*?)END$",或者您可以删除?您的正则表达式应该看起来像"#22(.*)END"

您还提到:

如何从文件中仅获取以下行(逐行)

你可以Pattern.DOTALL这样使用:

//text = text.replaceAll("[\r\n]+", " ");// no need to this 
Pattern pattern = Pattern.compile("#22(.*)END", Pattern.DOTALL);

这将返回:

    dog
    cat
    monkey
    END
    #33
    car
    bus
    van

编辑

我想要 #22 和 end 之间的文本(在 #33 之前)

在这可以使用这个正则表达式#22((.*)#33(.*?))END

Pattern pattern = Pattern.compile("#22((.*)#33(.*?))END", Pattern.DOTALL);

编辑

有什么办法不直接给出#33。因为没有数字顺序

您可以在这种情况下使用,其中数字可以由用户给出:

int number = 33;
String regex = String.format("#22((.*)#%d(.*?))END", number);
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);

推荐阅读