我有一个文本文件,其中每段文字都以###
文字档案:
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);
}
答案 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);
}