Wie kann man einen zufälligen String erzeugen?
Im Beispiel wird eine satzähnliche "Wortgruppe" erzeugt, die aus 1 bis 20 durch Leerzeichen voneinander getrennten "Wörtern" mit einer Länge zwischen 2 und 11 Buchstaben besteht, Die "Wörter" wiederum bestehen aus einer wechselnden Zahl an Groß- und Kleinbuchstaben, sowie Ziffern.
Das hier gezeigte Verfahren macht sich die numerische
Repräsentation von Character-Literalen durch den Unicode
zunutze. Die Bildung der Buchstaben erfolgt durch die Erzeugung
von int
‑Werten, die im Bereich der jeweiligen
dezimalen Unicode-Bereiche liegen:
Zahlen | 48 - 57 |
Großbuchstaben | 65 - 90 |
Kleinbuchstaben | 97 - 122 |
Durch Aufruf der Methode nextInt()
auf einem Random
‑Objekt
wird ein Pseudo-Zufallswert erzeugt. Die Methode gibt
ganzzahlige Werte zurück, die zwischen 0 inklusive und dem
als Argument übergebenen Wert exklusive liegen. Diese Werte
werden zu char
gecastet und in ein char
‑Array
eingefügt. Auf diese Weise wird eine Art "Satz"
erzeugt, der mindestens aus einem "Wort" besteht, das
wiederum aus mindestens zwei und maximal 11 Buchstaben gebildet
wird.
In zwei geschachtelten Schleifen werden die einzelnen
Wörter des Satzes gebildet, wobei innerhalb einer switch-case
-Verzweigung nach dem Zufall entschieden wird, ob ein Klein-
oder Großbuchstabe oder eine Ziffer erzeugt wird. Die
Buchstaben werden wie oben angegeben zunächst als int
-Werte gebildet und dann über ein explizites Casting in ein
char
‑Literal gewandelt. Für jedes Wort
wird ein char
‑Array gebildet, das zur Bildung
eines String
‑Objektes an dessen Konstruktor
übergeben wird.
import java.util.Random;
public class ZufallsString {
public static void main(String[] args) {
Random rand = new Random();
// word count
final int sentenceLength = rand.nextInt(20) + 1;
// word
char[] cArr;
// word length
int wordLength;
for (int n = 0; n < sentenceLength; n++) {
// word length between 2 and 11 chars
wordLength = rand.nextInt(10) + 2;
cArr = new char[wordLength];
for (int j = 0; j < cArr.length; j++) {
int i = rand.nextInt(3);
switch (i) {
case 0: // capital letters
cArr[j] = (char) (rand.nextInt(26) + 97);
break;
case 1: // lower-case character
cArr[j] = (char) (rand.nextInt(26) + 65);
break;
case 2: // digits
cArr[j] = (char) (rand.nextInt(10) + 48);
break;
}
}
System.out.print(new String(cArr) + " ");
}
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.