如何在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();