Ci sono tre fasi per il vostro problema, dividendo la String, inserendo casualità e che li utilizzano insieme ...
Divisione di un String
Pausa in parole con String.split(), che crea una serie di Stringhe (in questo caso parole) per spazi.
String[] words = text.split(" "); //Split by spaces
quindi rigenerare la vostra String con a capo aggiunto per esempio: -
StringBuiler sb = new StringBuilder();
for (String word : words)
{
sb.append(word + "\n");
}
String text2 = sb.toString();
In questo caso sarà inserire un ritorno a capo tra ogni parola e salvare il risultato in text2
.
Inserimento Casualità
Si potrebbe semplicemente creare un oggetto Random ...
Random random = new Random();
Quindi utilizzare nel codice che inserisce il vostro ritorno a capo, in questo modo ...
//Randomly add or don't add a newline (Compacted with a ternary operator instead of an 'if')
sb.append(word + (random.nextBoolean() ? "\n" : ""));
Unendo insieme (TLDR)
Quindi tutto ciò che devi fare è mantenere un conteggio delle newline inserite e limitarle a quello. Così il codice diventa: -
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();
Inoltre
Anche se la casualità in questo esempio si inserisce il vostro scopo qui non è l'implementazione ideale di casuale (come accennato nei commenti), in quanto v'è più pregiudizi verso uno che appare più vicino all'inizio della String rispetto alla fine e che non c'è possibilità che appaia prima della prima parola.
C'è anche un'altra opzione di usare StringTokenizer invece di String.split() che preferisco di gran lunga, ma non si tratta di espressioni regolari e sta cadendo fuori uso, così ho cambiato la mia risposta a utilizzare String.split()
misteriosi, inspiegabili giù voti di nuovo? :/ –
Non sono l'elettore, ma non dovresti usare più la classe 'StringTokenizer'. Usa invece 'String.split'. – Tom
@Tom Le prestazioni AFAIK su 'StringTokenizer' sono migliori di' split' – Rishav