Lyn*_*ynx 5 java string random
我有一个字符串:
String text = "Nothing right in my brain. Nothing left in my brain"
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的字符串text2,其中包含以前的2-4个随机新行,例如:
"Nothing \n right \n in my brain. \n Nothing left in my brain"
Run Code Online (Sandbox Code Playgroud)
要么
"Nothing right in \n my brain. Nothing left in \n my brain"
Run Code Online (Sandbox Code Playgroud)
如何在单词之间创建一个随机换行的新字符串?我想获取空白的索引,以便在随机空格后插入新行.但我只是继续获得第一个空白索引.有人知道更好的解决方法吗?谢谢.
你的问题分为三个阶段,分割字符串,插入随机性并将它们一起使用......
拆分字符串
使用String.split()将其分解为单词,它通过空格创建一个字符串数组(在本例中为单词).
String[] words = text.split(" "); //Split by spaces
Run Code Online (Sandbox Code Playgroud)
然后使用添加的换行符重建您的String: -
StringBuiler sb = new StringBuilder();
for (String word : words)
{
sb.append(word + "\n");
}
String text2 = sb.toString();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您将在每个单词之间插入换行符并保存结果text2.
插入随机性
你可以创建一个Random对象......
Random random = new Random();
Run Code Online (Sandbox Code Playgroud)
然后在插入换行符的代码中使用它,就像这样......
//Randomly add or don't add a newline (Compacted with a ternary operator instead of an 'if')
sb.append(word + (random.nextBoolean() ? "\n" : ""));
Run Code Online (Sandbox Code Playgroud)
将它们整合在一起(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();
Run Code Online (Sandbox Code Playgroud)
另外
虽然这个例子中的随机性符合你的目的,但它并不是随机的理想实现(如评论中所述),因为对于一个出现在字符串开头附近而不是结束的偏见更多,并且没有机会它出现在第一个单词之前.
还有另一种选择使用StringTokenizer而不是String.split(),我更喜欢它,但它不处理正则表达式并且不再使用,所以我改变了我的回答使用String.split()