您的问题分为三个阶段,拆分String,插入随机性并将它们一起使用...
拆分String
使用String.split() 将其分解为单词,这将创建一个由空格组成的字符串数组(在本例中为单词)。
String[] words = text.split(" "); //Split by spaces
然后重建你的 String 并添加换行符,例如:-
StringBuiler sb = new StringBuilder();
for (String word : words)
{
sb.append(word + "\n");
}
String text2 = sb.toString();
在这种情况下,您将在每个单词之间插入一个换行符并将结果保存在text2。
插入随机性
你可以只创建一个Random 对象...
Random random = new Random();
然后在插入换行符的代码中使用它,就像这样......
//Randomly add or don't add a newline (Compacted with a ternary operator instead of an 'if')
sb.append(word + (random.nextBoolean() ? "\n" : ""));
整合 (TLDR)
那么您需要做的就是维护插入的换行符的计数并将它们限制在此范围内。所以你的代码变成了:-
int requiredNewlines = random.nextInt(2 - 5) + 2; //Number between 2-4
for (String word : words) //For each word
{
sb.append(word); //Add it
if (requiredNewlines >= 0 && random.nextBoolean())
{
//Randomly add newline if we haven't used too many
sb.append("\n");
requiredNewlines--;
}
}
String text2 = sbAppen.toString();
另外
虽然此示例中的随机性符合您的目的,但它不是随机的理想实现(如 cmets 中所述),因为出现更接近 String 开头而不是结尾和它不可能出现在第一个单词之前。
还有另一种选择使用StringTokenizer 而不是String.split(),我更喜欢它,但它不处理正则表达式并且不再使用,所以我改变了我的答案以使用String.split()