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

我有一个文本文件,其中每个文本段由###分隔

文本文件:

 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); } 

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

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

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

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

也许你正在寻找这个

 //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)]; 

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

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

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

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

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

编辑:看到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); }