java - 如何在Java中获取文本文件的随机行?

标签 java file random

假设有一个文件太大而无法存储。我怎样才能从中得到一条随机线?谢谢。

更新: 我希望每条线的概率相等。

最佳答案

如果只想要一行,则读取整个文件似乎有点过分。以下应该更有效:

  1. 使用 RandomAccessFile寻找文件中的随机字节位置。
  2. 向左和向右寻找下一行终止符。让 L 在它们之间划线。
  3. 有概率 (MIN_LINE_LENGTH/L.length) 返回 L。否则,从第 1 步重新开始。

这是 rejection sampling 的变体.

行长包括行终止符,因此 MIN_LINE_LENGTH >= 1。(如果您知道对行长有更严格的限制,那就更好了)。

值得注意的是,该算法的运行时间不依赖于文件大小,只依赖于行长,即它的扩展性比读取整个文件要好得多。

关于java - 如何在Java中获取文本文件的随机行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218005/

相关文章:

java - 将参数从 servlet 转发到 jsp

java - 如何创建 mysql "sha-256"列?

file - 将多个目录中相同类型的所有文件上移一个文件夹

c# - FileInfo.CopyTo 返回 ArgumentException :

java - 为什么 Random.setSeed 的 Java 实现将参数与 0x5DEECE66DL 异或?

java - 生成随机的简单数学除法问题

java - 迭代器模式是否违反得墨忒耳定律? (最少知识原则)

java - Tomcat API 与其他 API

jquery - 如何克隆值输入文件

c++ - 统计数学问题