如何在java中读取特定行号上方和下方的行?

如何在java中读取特定行号上方和下方的行?,java,file-io,Java,File Io,我需要解析txt格式的日志文件 我需要匹配字符串并读取匹配字符串的上下行 我需要做一些类似于grep-a30-b50‘hello’的事情 如果您有任何其他建议,欢迎使用。逐行阅读文件,并匹配您的字符串(regexp或string.indexOf(“”))。将前面的n行保留在内存中,以便在匹配字符串后可以打印它们。用于逐行读取文件(请注意,使用BufferedReader实际上更复杂,因为您无法跳回)。 或者为了更大的灵活性。使用此方法,您可以标记您的位置,打印接下来的m行,然后跳回原来的位置继续

我需要解析
txt
格式的日志文件

我需要匹配字符串并读取匹配字符串的上下行

我需要做一些类似于grep-a30-b50‘hello’的事情


如果您有任何其他建议,欢迎使用。

逐行阅读文件,并匹配您的字符串(regexp或string.indexOf(“”))。将前面的n行保留在内存中,以便在匹配字符串后可以打印它们。用于逐行读取文件(请注意,使用BufferedReader实际上更复杂,因为您无法跳回)。 或者为了更大的灵活性。使用此方法,您可以标记您的位置,打印接下来的m行,然后跳回原来的位置继续搜索。

伪代码:

initialize a Queue
for each line
    if line matches regex
        read/show lines from queue;
        read/show next lines;
    else {
        if queue size > 30
             queue.remove() // removes head of the queue
        add this line to queue;
    }
您可以使用来逐行读取文件,对照正则表达式检查该行,并存储以前的行。

您可以使用以下代码(使用java 5 api java.util.Scanner):


您可能需要在
String next=scanner.nextLine()

之前添加额外的检查,以确保
prev
不为空,并调用
scanner.hasNextLine()
,您需要打印搜索字符串每次出现的前30行和后50行。您的伪代码并没有真正做到这一点……在编辑之前,问题没有提到30行——只是“行上和行下”。现在编辑代码。是的,我从“grep-a30-b50‘你好’”:D中扣除了这个
    Scanner scanner = new Scanner(new File("YourFilePath"));
    String prev = null;
    String current;
    while (scanner.hasNextLine())
    {
        current = scanner.nextLine();
        if (current.contains("YourRegEx"))
            break;
        else
            prev = current;
    }
    String next = scanner.nextLine();