[英]Need searched text and a few lines around it in Solr search in java api
[英]Java search in a text and returning multiple lines around it
我在一個更大的 txt 文件(~8Mb)中搜索,其中每一行看起來像這樣: dd/mm/yyyy hh:mm:ss 在這些之后有不同的標識符,然后是一個值。
dd/mm/yyyy hh:mm:ss identifier not relevant in search
dd/mm/yyyy hh:mm:ss identifier not relevant in search
dd/mm/yyyy hh:mm:ss identifier not relevant in search
dd/mm/yyyy hh:mm:ss identifier value -> value that I am searching for
dd/mm/yyyy hh:mm:ss identifier not relevant in search
dd/mm/yyyy hh:mm:ss identifier not relevant in search
我已成功找到並打印出包含我正在搜索的值的整行,但我需要在其他行中打印它周圍的值(之后 9 行,之前 5 行)。
public void fajl(String fajlnev, String szeriaszam) throws FileNotFoundException{
int sorszam = 0;
Scanner serialnummer = new Scanner(new File(fajlnev));
while(serialnummer.hasNext()){ //keresés pörgetése
String line = serialnummer.nextLine().toString();
sorszam++;
if(line.contains(szeriaszam)){
System.out.println(line + "\n" + sorszam);
搜索和打印出來是這樣的。 正如你所看到的,我也可以告訴行號,但我不知道如何打印出其他行。 我正在考慮上傳一個數組或類似的東西,但不知道從哪里開始。
您可以使用隊列(例如 Java LinkedList
)在要匹配的行周圍存儲前 9 行和后 5 行。 然后,只需打印出鏈表中的所有行。
public void fajl(String fajlnev, String szeriaszam) throws FileNotFoundException {
List<String> lines = new LinkedList<>();
Scanner serialnummer = new Scanner(new File(fajlnev));
int counter = 5;
boolean flag = false;
while (serialnummer.hasNext()) {
String line = serialnummer.nextLine().toString();
if (lines.size() >= 9 && !flag) {
lines.removeFirst();
}
lines.add(line);
if (line.contains(szeriaszam) && !flag) {
flag = true;
}
else if (flag && --counter == 0) {
break;
}
}
for (String line : lines) {
System.out.println(line);
}
}
這里的邏輯是我們開始讀取所有行並將其存儲到鏈表中。 一旦列表大小達到 9,並且如果在我們找到匹配行之前發生這種情況,我們就會踢出最舊的行,為最新的傳入行騰出空間。 一旦找到匹配的行,我們也添加它,然后再添加 5 行,倒計時。 在方法結束時,我們將 15 行(包括匹配行)打印到控制台。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.