检查文件是否包含特定字符串或数字的最快方法是什么?使用java在文本文件中查找字符串的最快方法
3
A
回答
5
查看JDK提供的Scanner
类(See official documentation)。您将能够跳过某些输入部分(在本例中为文本文件),并与您的愿望的正则表达式相匹配。我不确定这是否是最有效的方式,但肯定 - 这很简单。你也可以看看this example,这会帮助你开始。
2
未尝试过,但可能最快的机制是首先将您的搜索关键字编码为文件。例如,如果您知道该文件是UTF-8,请取出您的密钥并将其从一个字符串(UTF-16)编码为UTF-8字节数组。这很重要,因为通过编码到文件表示,您只能对密钥进行编码。使用标准的Java阅读器则是另一种方式 - 将文件转换为UTF-16。
现在您已经有了一个正确的密钥,以字节为单位,使用NIO为该文件创建一个MappedByteBuffer。这将文件映射到虚拟内存空间。
最后,执行字符串搜索一个Boyer-Moore algorithm,使用针对通过映射区域的文件的字节的关键字节,
有可能是一个更快的方法,但是这解决了大部分问题在Java中搜索文本文件。它利用虚拟机来避免复制文件的大块,并且跳过文件转换为UTF-16的转换步骤,而UTF-16是Java在内部使用的。
0
0
我在MIMEParser找到的最好的实现: https://github.com/samskivert/ikvm-openjdk/blob/master/build/linux-amd64/impsrc/com/sun/xml/internal/org/jvnet/mimepull/MIMEParser.java
/**
* Finds the boundary in the given buffer using Boyer-Moore algo.
* Copied from java.util.regex.Pattern.java
*
* @param mybuf boundary to be searched in this mybuf
* @param off start index in mybuf
* @param len number of bytes in mybuf
*
* @return -1 if there is no match or index where the match starts
*/
private int match(byte[] mybuf, int off, int len) {
还需要:
private void compileBoundaryPattern();
相关问题
- 1. 在文件中查找字符串的最快方法
- 2. 在文本文件中查找子串的最快方法
- 3. Java - 读取文本文件的最快方法字符字符
- 4. 在文本文件中搜索字符串的更快方法
- 5. 在文件中搜索字符串的最快方法
- 6. 在另一个字符串中查找字符串子集的最快方法?
- 7. 查找文本文件中出现的最大字符串
- 8. 找到字符串数组中字符串的最快方法
- 9. 在Java中逐行读取文本文件的最快方法
- 10. 检查大量文件中是否存在字符串的最快方法
- 11. 在文本文件中查找字符串并寻找它们
- 12. 最快的方法 - 字符串组件
- 13. 从Java中的文本文件中查找字符串中的数字
- 14. 无法在Java文件中查找字符串
- 15. 在字符串中查找文本
- 16. 查找文件中是否存在字符串的最佳方法
- 17. 如何在文本文件中查找字符串的位置
- 18. Java - 检查字符串大小的最快方法
- 19. 在文本文件上查找字符串 - 批处理文件
- 20. 查找方法的字符串中的一个文件
- 21. 从文本文件中查找字母数字字符串
- 22. 在.txt文件中查找字符串
- 23. 用于查找字符串的最快Java集合?
- 24. Matlab:在文本文件中查找字符串
- 25. 如何在文本文件中查找字符串
- 26. 在文本文件中查找字符串C
- 27. 使用MySQL在字符串中查找确切的文本
- 28. 最快的方法来检查一个文件是否包含字符串列表中的任何字符串
- 29. 在VBA中替换字符串中字符的最快方法
- 30. 查找文件中的字符串
谷歌首次^ _ ^总是帮助:-D – Neal 2011-03-28 14:47:57
检查此链接:http: //www.dreamincode.net/forums/topic/48905-search-inside-a-text-file/ – reggie 2011-03-28 14:48:19
我知道如何使用谷歌... 我想知道哪种方法更快...例如使用扫描仪或缓冲读取器... – Franky 2011-03-28 15:02:02