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 ein Satz erzeugt, der aus 1 bis 20 "Wörtern" mit einer Länge zwischen 2 und 11 Buchstaben besteht, Die "Wörter" wiederum bestehen aus Groß- und Kleinbuchstaben, sowie Zahlen.

Die Pseudo-Zufallswerte werden im Beispiel durch die Methode nextInt() auf einem Random -Objekt erzeugt. Die Methode gibt ganzzahlige Werte zurück, die zwischen 0 inklusive und dem als Argument übergebenen Wert exklusive liegen. Auf diese Weise wird ein Satz erzeugt, der mindestens aus einem Wort besteht, das widerum aus mindestens zwei und maximal 11 Buchstaben gebildet wird.
Die Bildung der Buchstaben selbst erfolgt zunächst durch die Erzeugung von int -Werten, die die jeweiligen dezimalen Unicode-Bereiche abdecken:

Zahlen 48 - 57
Großbuchstaben 65 - 90
Kleinbuchstaben 97 - 122

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) {
        // word count
        final int sentenceLength = new Random().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 = new Random().nextInt(10) + 2;
            cArr = new char[wordLength];
            for (int j = 0; j < cArr.length; j++) {
                int i = new Random().nextInt(3);
                switch (i) {
                case 0:        // capital letters
                    cArr[j] = (char) (new Random().nextInt(26) + 97);
                    break;
                case 1:        // lower-case character
                    cArr[j] = (char) (new Random().nextInt(26) + 65);
                    break;
                case 2:        // digits
                    cArr[j] = (char) (new Random().nextInt(10) + 48);
                    break;
                }
            }
            System.out.print(new String(cArr) + " ");
        }
    }
}