Wie kann man einen zufälligen String erzeugen?

Die Erzeugung eines beliebigen Zufalls-Strings ist mit Hilfe eines Character-Arrays recht einfach.

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) + " ");
        }
    }
}