【问题标题】:How to get a random line from text file in Android using Android Studio 2.1.3?如何使用 Android Studio 2.1.3 从 Android 中的文本文件中获取随机行?
【发布时间】:2016-08-19 07:11:56
【问题描述】:

我有一个 500 行的文本文件。我将此文本文件放在 app/src/main/assets 文件夹中,名称为“words.txt”。在这个文件中,每一行都用换行符分隔。现在我需要从这个文本文件中获取随机行。在发布此之前,我访问了以下问题。

How to load random line from text file in android?

InputStreamReader and reading random lines from .txt file

How to grab a random line from a text file and print the line [duplicate]

How to get a random line of a text file in Java?

Reading a random line from text file in android

我已经从上面的链接以及this 一个链接构建了我的代码。我不知道存在一些称为行号阅读器的类。

这是我的代码:

try {
        //Initialize assetmanager class
        AssetManager am = this.getAssets();
        //open file using asset manager
        InputStream is = am.open("words.txt");
        //read buffer manager
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        //Important: use of LineNumberReader Class
        LineNumberReader lnr = new LineNumberReader(reader);
        Random r = new Random();
        int n = r.nextInt(500)+1;
        lnr.setLineNumber(n);
        mWord = lnr.readLine();
        Log.d("MyLog","The letter is "+mWord);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

现在这段代码可以工作,但总是给出第一行。生成随机数,但 lnr (LineNumberReader) 始终读取第一行。为什么?

这是为了学习目的。对于当前情况,我知道文件的长度(或总行数)为 500。

【问题讨论】:

标签: java android android-studio random java-io


【解决方案1】:

现在这段代码可以工作,但总是给出第一行。随机数 已生成,但 lnr (LineNumberReader) 始终读取第一行。 为什么?

看到这个LineNumberReader

但是请注意,setLineNumber(int) 实际上并没有改变流中的当前位置;它只会更改 getLineNumber() 将返回的值。

这就是为什么它总是读取第一行。

【讨论】:

  • 参见 Oracle docs.oracle.com/javase/6/docs/api/java/io/LineNumberReader.html 这个类不提供它所命名的函数。
  • 所以我有错误的假设。在这种情况下,我如何更改正在读取的当前行号? skip() 有用吗?
  • @LongRanger 没错。我正在考虑使用带有随机 no 和 read 行的循环。
猜你喜欢
  • 2015-11-18
  • 1970-01-01
  • 2015-01-06
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多