我需要解析一个txt
格式的日志文件。
我需要匹配String并读取匹配的String的上下行。
我需要做类似grep -A 30 -B 50 'hello'
的事情。
如果您有任何其他建议,欢迎您。
答案 0 :(得分:1)
逐行读取文件,并匹配您的字符串(regexp或String.indexOf(“”))。将前n行保留在内存中,以便在匹配字符串时可以打印它们。使用BuffereReader.readLine()逐行读取文件(请注意,使用BufferedReader实际上更复杂,因为您无法跳回)。 或者更灵活RandomAccessFile。使用此方法,您可以标记您的位置,打印下m行,然后跳回以继续搜索您离开的位置。
答案 1 :(得分:1)
伪代码:
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;
}
您可以使用BufferedReader逐行读取文件,Pattern根据正则表达式检查行,并使用Queue存储以前的行。
答案 2 :(得分:0)
您可以使用以下代码(使用java 5 api java.util.Scanner):
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();
您可能希望添加prev
非空的其他检查,并在scanner.hasNextLine()
之前调用String next = scanner.nextLine()