你的问题有三个阶段,分别是将String拆分、插入随机性以及将它们结合在一起...
拆分String
使用String.split()将其按空格拆分成字符串数组(在本例中为单词)。
String[] words = text.split(" ")
然后重新构建带有换行符的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" : ""));
汇总(简短版)
然后,您只需要维护插入的换行符计数并将其限制在该计数内。因此,您的代码变为:
int requiredNewlines = random.nextInt(2 - 5) + 2;
for (String word : words)
{
sb.append(word);
if (requiredNewlines >= 0 && random.nextBoolean())
{
sb.append("\n");
requiredNewlines--;
}
}
String text2 = sbAppen.toString();
此外
尽管在这个例子中的随机性符合您的目的,但它并不是随机的理想实现(如评论中所提到的),因为更倾向于一个词出现在String的开头而不是结尾,并且没有机会在第一个单词之前出现。
还有另一种选项是使用StringTokenizer而不是String.split(),我更喜欢它,但它无法处理正则表达式并且正在退出使用,因此我已经更改了我的答案以使用String.split()。
StringTokenizer
类了。改用String.split
代替。 - TomStringTokenizer
的性能比split
更好。 - xrisk\n
。 - Jordi Castilla