Java - Generer tilfældig streng

I denne vejledning skal vi vise, hvordan man genererer en tilfældig streng i Java - først ved hjælp af standard Java-biblioteker, derefter ved hjælp af en Java 8-variant og endelig ved hjælp af Apache Commons Lang-biblioteket.

Denne artikel er en del af "Java - Back to Basic" -serien her på Baeldung.

1. Generer tilfældig ubundet streng med almindelig Java

Lad os starte simpelt og generere en tilfældig Snor afgrænset til 7 tegn:

@Test offentlig ugyldighed givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect () {byte [] array = ny byte [7]; // længde afgrænses af 7 nye Random (). nextBytes (array); StrenggenereretString = ny streng (array, Charset.forName ("UTF-8")); System.out.println (generatedString); }

Husk, at den nye streng ikke vil være noget eksternt alfanumerisk.

2. Generer tilfældig afgrænset streng med almindelig Java

Næste - lad os se på at skabe en mere begrænset tilfældig streng; vi genererer en tilfældig Snor ved hjælp af små alfabetiske bogstaver og en indstillet længde:

@Test offentlig ugyldighed givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect () {int leftLimit = 97; // bogstav 'a' int rightLimit = 122; // bogstavet 'z' int targetStringLength = 10; Tilfældig tilfældig = ny tilfældig (); StringBuilder buffer = ny StringBuilder (targetStringLength); for (int i = 0; i <targetStringLength; i ++) {int randomLimitedInt = leftLimit + (int) (random.nextFloat () * (rightLimit - leftLimit + 1)); buffer.append ((char) randomLimitedInt); } StrenggenereretString = buffer.toString (); System.out.println (generatedString); }

3. Generer tilfældig alfabetisk streng med Java 8

Lad os nu bruge det Tilfældige aftryk - tilføjet i JDK 8 - for at generere et alfabetisk Snor:

@Test offentlig ugyldighed givenUsingJava8_whenGeneratingRandomAlphabeticString_thenCorrect () {int leftLimit = 97; // bogstavet 'a' int rightLimit = 122; // bogstavet 'z' int targetStringLength = 10; Tilfældig tilfældig = ny tilfældig (); String generatedString = random.ints (leftLimit, rightLimit + 1) .limit (targetStringLength) .collect (StringBuilder :: new, StringBuilder :: appendCodePoint, StringBuilder :: append) .toString (); System.out.println (generatedString); }

4. Generer tilfældig alfanumerisk streng med Java 8

Og så kan vi udvide vores tegnsæt for at få et alfanumerisk Snor:

@Test offentlig ugyldighed givetUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect () 

Bemærk brugen af filter metoden ovenfor for at udelade Unicode-tegn mellem 65 og 90 - for at undgå tegn uden for området.

5. Generer afgrænset tilfældig streng med Apache Commons Lang

Commons Lang-biblioteket fra Apache hjælper meget med tilfældig strenggenerering. Lad os se på generere en afgrænset Snor bruger kun bogstaver:

@Test offentlig ugyldighed givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect () {int længde = 10; boolsk useLetters = sandt; boolsk useNumbers = false; String generatedString = RandomStringUtils.random (længde, useLetters, useNumbers); System.out.println (generatedString); }

Så - i stedet for al koden på lavt niveau i Java-eksemplet - gøres denne med en simpel one-liner.

6. Generer alfabetisk streng med Apache Commons Lang

Et andet meget simpelt eksempel - denne gang en afgrænset Snor med kun alfabetiske tegn, men uden at overføre boolske flag til API:

@Test offentlig ugyldighed givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect () {String generatedString = RandomStringUtils.randomAlphabetic (10); System.out.println (generatedString); }

7. Generer alfanumerisk streng med Apache Commons Lang

Og endelig - den samme tilfældige afgrænsning Snor men denne gang - numerisk:

@Test offentlig ugyldighed givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect () {String generatedString = RandomStringUtils.randomAlphanumeric (10); System.out.println (generatedString); }

Og der har vi det - oprettelse af afgrænsede og ubegrænsede strenge med enten almindelig Java, en Java 8-variant eller Apache Commons Library.

8. Konklusion

Gennem forskellige implementeringsmetoder var vi i stand til at generere bundne og ubundne strenge ved hjælp af almindelig Java, en Java 8-variant eller Apache Commons Library.

I disse Java-eksempler har vi brugt java.util. tilfældighed, men et punkt, der er værd at nævne, er, at det ikke er kryptografisk sikkert. Overvej at bruge java.security.SecureRandom i stedet for sikkerhedsfølsomme applikationer.

Implementeringen af ​​alle disse eksempler og uddrag findes i GitHub-projektet. Dette er et Maven-baseret projekt, så det skal være let at importere og køre.