gpt4 book ai didi

Java 在文本中搜索并在文本周围返回多行

转载 作者:行者123 更新时间:2023-12-04 08:52:10 26 4
gpt4 key购买 nike

我在一个更大的 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 行(包括匹配行)打印到控制台。

关于Java 在文本中搜索并在文本周围返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64048731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com