2014-11-23 53 views
0

我是新来的Java和stackoverflow。我有一个文本文件,我希望我的Java程序可以读取,然后选择一个随机行并显示它。我发现的只是演示字节和字符。我如何使用字符串或只是一行?我很抱歉,这个问题之前已经被问到过,但其他帖子并没有帮助我。我很茫然,我觉得这有一个简单的解决方案。如何显示文本文件中的随机行?

这是我到目前为止有:

package Nickname; 

import java.util.Scanner; 
import java.io.*; 

public class Nickname { 

    public static void main(String[] args) throws IOException { 

     RandomAccessFile randomFile = new RandomAccessFile("names.txt", "r"); 

    } 

} 

回答

0

我建议你使用一个缓冲的读者。通过in.readLine(),您可以从文件中获得下一行。

Math.random()生成一个介于0和1之间的(伪)随机数。通过乘法和转换为int,可以生成一个介于0和100之间的数字。如果该随机数碰巧是一个特定值(本例中为50)停止您的循环并打印行。

您可以通过将倍增因子更改为您喜欢的任何值来更改循环中断的几率。只要确保与指定范围内的数字进行比较。

BufferedReader in = new BufferedReader(new FileReader(file)); 

while (in.ready()) { 

    String s = in.readLine(); 

    //1% chance to trigger, if it is never triggered by chance you will display the last line 
    if (((int)(Math.random*100)) == 50) 
    break; 

} 
in.close(); 
System.out.println(s); 

或者像这样的解决方案可能是更优雅,让您获得任一值的均匀分布的机会:

BufferedReader in = new BufferedReader(new FileReader(file)); 
List<String> myNicknames = new ArrayList<String>(); 
String line; 

while ((line = in.readLine()) != null) { 
    myNicknames.add(line); 
} 
in.close(); 

System.out.println(myNicknames.get((int)(Math.random() * myNicknames.size()))); 
+0

你可能是正确的那一个。与null相比肯定会起作用,所以我会用它来保证安全。 – nitowa 2014-11-23 22:32:54

+0

随机想法:在这种情况下使用ArrayList不是最有效的实现。由于您添加了多次,但只获得一次,LinkedList速度要快很多。 (1),获得O(n) – nitowa 2014-11-23 22:43:32

+0

我需要文本文件中的每一行都有相等的机会存在阅读其他行。这两种策略中的哪一种会更好地发挥作用? – shottyrockets 2014-11-24 17:24:25