私は文字列を持っています:
String text = "Nothing right in my brain. Nothing left in my brain"
私は 新しい 文字列 text2
次のような、前の行から2〜4個のランダムな改行があります。
"Nothing n right n in my brain. n Nothing left in my brain"
または
"Nothing right in n my brain. Nothing left in n my brain"
ランダムな改行で新しい文字列を作成する方法言葉の間? ランダムな空白の後に新しい行を挿入するために、空白のインデックスを取得することを考えています。しかし、最初の空白インデックスのみを取得し続けます。 誰もこれを解決するためのより良いアプローチを知っていますか?ありがとうございました。
回答:
回答№1は5問題には3つの段階があります。 文字列、ランダム性を挿入して一緒に使用する...
分割 文字列
言葉に分解する String.split()、スペースで文字列(この場合は単語)の配列を作成します。
String[] words = text.split(" "); //Split by spaces
その後、再構築 文字列 たとえば、改行が追加されました:-
StringBuiler sb = new StringBuilder();
for (String word : words)
{
sb.append(word + "n");
}
String text2 = sb.toString();
この場合、すべての単語の間に改行を挿入して結果を保存します text2
.
ランダムネスの挿入
あなただけを作成することができます ランダム オブジェクト...
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();
さらに
この例のランダム性はあなたに合っていますがここでの目的は、(コメントで述べられているように)ランダムの理想的な実装ではありません。開始近くに表示されるものに偏りがあります。 文字列 終わりよりも、最初の単語の前に表示される可能性はありません。
使用する別のオプションもあります StringTokenizer の代わりに String.split() 私はこれを非常に好みますが、正規表現を処理せず、使用されなくなっているため、使用するように回答を変更しました String.split()
回答№2の場合は1
まず、2〜4の新しいランダムが必要です。
int max = 4;
int min = 2;
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
文字列を単語に分割した後:
String[] words = text.split(" ");
次に、から4つの異なる番号を取得します 1
に words.length
ArrayList<Integer> randomPositions = new ArrayList<Integer>(randomNum);
max = words.length;
min = 1;
for (int count = 0; count < randomNum; count ++) {
int random = rand.nextInt((max - min) + 1) + min;
if (randomPositions.contains(random)) count --;
else randomPositions.add(random);
}
最後に置く n
アレイを再構築するときの位置:
StringBuilder result = new StringBuilder();
for (int count = 0; count < max; count ++) {
result.append(words[count]);
if (randomPositions.contains(count))
result.append("n");
else
result.append(" ");
}
チェック この実用的なデモ
出力1:
Nothing right in my
brain. Nothing
left in my brain
出力2:
Nothing right
in my brain. Nothing left
in my
brain
出力3:
Nothing right in my brain. Nothing left
in my brain
回答№3の場合は0
どちらかを使用して最初のインデックスを取得することしかできません indexOf()
またはを使用して最後のインデックス lastIndexOf()
メソッド。
ただし、回避策として使用できます text.indexOf(" ", randomInt);
。これにより、randomIntインデックスの後に「」の最初のインデックスが作成されます。
回答№4の場合は0
String str = "Nothing right in my brain. Nothing left in my brain";
String[] split = str.split(" ");
for (int i = 0; i < split.length; i++) {
int flag = ((int) (Math.random() * 10)) % 2;
if (flag == 0) {
split[i] = split[i] + "n";
}
}
str="";
for (int i = 0; i < split.length; i++) {
str += split[i]+" ";
}
回答№5の場合は0
まず、新しい行を配置する場所にランダムなインデックスを取得できます
Random rand = new Random();
String[] words = text.split(" ");
for(int i = 0; i < 3; i++){
int index = rand.nextInt(words.length());
words[index] = "n" + words[index];
}
text = Arrays.toString(words);
そして最後にあなたはあなたのランダムな場所に3つの新しい行があります text
文字列
編集:コンマなしの結果になる1つの方法はこれです:
text = Arrays.toString(words).replaceAll(", ", " ");
答え№6の場合は0
異なる位置に挿入された文字列を生成します。
public static String generateString(String inputString, String delimiter,
String insString, int[] insIndexes) {
String[] splittedString = inputString.split(delimiter);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < splittedString.length; i++) {
sb.append(splittedString[i]);
if (Arrays.binarySearch(insIndexes, i + 1) >= 0)
sb.append(delimiter + insString);
sb.append(delimiter);
}
return sb.toString();
}
呼び出し部分:
String inputString = "Nothing right in my brain. Nothing left in my brain";
String delimiter = " "; // input String delimiter
String insString = "n"; // insertion String
int[] insIndexes = { 2, 4, 6, 8 }; // insertion indexes
String outputString = generateString(inputString, delimiter, insString, insIndexes);