gpt4 book ai didi

java - 如何在java中以特定格式搜索非常大的文件中的字符串?

转载 作者:行者123 更新时间:2023-12-01 15:55:35 24 4
gpt4 key购买 nike

Possible Duplicate:
do searching in a very big ARPA file in a very short time in java

我的文件格式:

\数据\

ngram 1=19

ngram 2=234

ngram 3=1013

\1-克:

-1.7132普鲁-3.8008

-1.9782 饱和度-3.8368

\2 克:

-1.5403达拉姆杜阿-1.0560

-3.1626 达拉姆 ini 0.0000

\3 克:

-1.8726 国际电联和蒂加

-1.9654 国际电联和联合国

\结束\

正如你所看到的,我在 ngram 1,2 和 3 中有很多行。无需读取整个文件。如果输入字符串是单字字符串,则程序只能在\1-grams: 部分进行搜索。如果输入字符串是两个单词的字符串,则程序可以仅在\2-grams: 部分等中搜索。最后,如果程序在文件中找到输入字符串,则必须返回位于字符串左侧和右侧的两个数字。另外,我不得不说,文件的每个部分都已排序。我确信我不必完全读取该文件,并且使用索引文件无法解决我的问题。这些方式都需要花费很多时间,我的讲师说这么大的文件搜索必须在1分钟之内完成。我认为最好的办法是找到一种方法跳转到文件的特定行而不是字节,但我不知道该怎么做。如果有人能帮助我解决我的问题,那就太好了。

我的文件将近 800MB。我发现使用 BufferedReader 是一种非常快地读取文件的好方法,但是当我读取这么大的文件并将其逐行放入数组中时,需要超过 30 分钟。

最佳答案

你的文件有多大?一分钟是一段很长的时间。我建议使用 BufferedReader 来提高效率(及其 readLine 方法)。

如果这确实需要太长时间,我会想到两种不使用索引的方法:

  1. 强制文件中的每一行具有相同的长度。然后你可以通过计算它的开始来跳转到特定的行。如果您不知道所需的行号,那么至少您可以使用它来有效地对整个文件进行二分搜索。

  2. 跳转到任意位置并向前阅读,直到到达以 \ 开头的行。这将告诉您是否找到了正确的部分,或者您是否需要从那里向前跳跃或从您跳跃到的任意位置向后跳跃。这也可以用于为您需要的数据创建二分搜索策略。它依赖于 \ 作为零件开始的可靠指示符。

关于java - 如何在java中以特定格式搜索非常大的文件中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5131619/

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