拆分文本并从文本文件中选择随机

时间:2018-06-13 19:36:45

标签: java

我有一个文本文件,其中每段文字都以###

分隔

文字档案:

Text 1

###

Text 2

###

Text 3

###
Text 4

目前,下面的代码会读取整个文本文件,但我想选择一个随机文本,由于###,所提到的文本与其他文本分开。如何实施?

private void setContent(){
        String text = "";

        try {
            // file to inputstream
            InputStream input = getAssets().open("files/jokes.txt");
            int size = input.available();
            byte[] buffer = new byte[size];
            input.read(buffer);
            input.close();
            // byte buffer into a string
            text = new String(buffer);

        }
        catch (Exception e) {
            System.out.println(e);
        }

        contentText.setText(text);

    }

4 个答案:

答案 0 :(得分:2)

也许你正在寻找这个

//separate whole text into pieces using separator 
String[] allPieces = text.split("###");
//select random text piece from all text pieces
String randomPiece = allPieces[new Random().nextInt(allPieces.length)];

答案 1 :(得分:1)

您可以先将###字符串拆分为分隔符:

String [] textParts = text.split("###");

然后您可以选择这样的随机部分:

Random rand = new Random();
int  randomIndex = rand.nextInt(textParts.length());
String randomTextPart = textParts[randomIndex];

答案 2 :(得分:0)

将String更改为String数组,并将每行读取为数组的新元素。

然后,您可以使用Random生成0到数组长度之间的随机数。

使用该数字从您的读取数组中获取随机文本!

答案 3 :(得分:0)

我不推荐基于#的格式,因为当实际文本中有#时它会中断。此外,还有很多文件格式可以帮助您(例如XML,JSON等)。

但是,要解决您的问题,您可以使用String.split()方法。它接收分隔符并在分隔符的所有出现时拆分文本。然后使用Math.random()Random类的新实例从返回的数组中选择一个随机项。

编辑:看到OP已更改问题,您现在需要使用###作为分隔符而不是之前的#

示例:

private void setContent(){
    String text = "";

    try {
        // file to inputstream
        InputStream input = getAssets().open("files/jokes.txt");
        int size = input.available();
        byte[] buffer = new byte[size];
        input.read(buffer);
        input.close();
        // byte buffer into a string
        text = new String(buffer);

        String[] jokes = text.split("###");
        String yourJoke = jokes[(int)(Math.random() * jokes.length)];
        // Do something with your joke

    }
    catch (Exception e) {
        System.out.println(e);
    }

    contentText.setText(text);

}