Java - Generer tilfeldig streng
I denne opplæringen skal vi vise hvordan du genererer en tilfeldig streng i Java - først ved hjelp av standard Java-biblioteker, deretter ved hjelp av en Java 8-variant, og til slutt ved hjelp av Apache Commons Lang-biblioteket.
Denne artikkelen er en del av "Java - Back to Basic" -serien her på Baeldung.
1. Generer tilfeldig ubegrenset streng med vanlig Java
La oss starte enkle og generere en tilfeldig String avgrenset til 7 tegn:
@Test offentlig ugyldighet givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect () {byte [] array = ny byte [7]; // lengde avgrenses av 7 nye Random (). nextBytes (array); StrenggenerertString = ny streng (matrise, Charset.forName ("UTF-8")); System.out.println (generatedString); }
Husk at den nye strengen ikke vil være noe eksternt alfanumerisk.
2. Generer tilfeldig avgrenset streng med vanlig Java
Neste - la oss se på å lage en mer begrenset tilfeldig streng; vi skal generere en tilfeldig String bruker små bokstaver og en bestemt lengde:
@Test offentlig ugyldighet givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect () {int leftLimit = 97; // bokstav 'a' int rightLimit = 122; // bokstav 'z' int targetStringLength = 10; Tilfeldig tilfeldig = ny Tilfeldig (); 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); } StrenggenerertString = buffer.toString (); System.out.println (generatedString); }
3. Generer tilfeldige alfabetiske strenger med Java 8
La oss nå bruke det Tilfeldig.int - lagt til i JDK 8 - for å generere et alfabetisk stoff Streng:
@Test offentlig ugyldighet givenUsingJava8_whenGeneratingRandomAlphabeticString_thenCorrect () {int leftLimit = 97; // bokstav 'a' int rightLimit = 122; // bokstav 'z' int targetStringLength = 10; Tilfeldig tilfeldig = ny Tilfeldig (); String generatedString = random.ints (leftLimit, rightLimit + 1) .limit (targetStringLength) .collect (StringBuilder :: new, StringBuilder :: appendCodePoint, StringBuilder :: append) .toString (); System.out.println (generatedString); }
4. Generer tilfeldig alfanumerisk streng med Java 8
Og så kan vi utvide tegnsettet vårt for å få et alfanumerisk Streng:
@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect ()
Legg merke til bruken av filter metoden ovenfor for å utelate Unicode-tegn mellom 65 og 90 - for å unngå tegn utenfor rekkevidden.
5. Generer avgrenset tilfeldig streng med Apache Commons Lang
Commons Lang-biblioteket fra Apache hjelper mye med tilfeldig strenggenerering. La oss ta en titt på generere en avgrenset String bruker bare bokstaver:
@Test offentlig ugyldighet givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect () {int length = 10; boolsk useLetters = true; boolsk useNumbers = false; String generatedString = RandomStringUtils.random (lengde, useLetters, useNumbers); System.out.println (generatedString); }
Så - i stedet for all lavnivåkode i Java-eksemplet - gjøres denne med en enkel enlinje.
6. Generer alfabetisk streng med Apache Commons Lang
Et annet veldig enkelt eksempel - denne gangen en avgrenset String med bare alfabetiske tegn, men uten å sende boolske flagg til API: et:
@Test offentlig ugyldighet givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect () {String generatedString = RandomStringUtils.randomAlphabetic (10); System.out.println (generatedString); }
7. Generer alfanumerisk streng med Apache Commons Lang
Og til slutt - den samme tilfeldige grensen String men denne gangen - numerisk:
@Test offentlig ugyldighet givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect () {String generatedString = RandomStringUtils.randomAlphanumeric (10); System.out.println (generatedString); }
Og der har vi det - skape avgrensede og ubegrensede strenger med enten vanlig Java, en Java 8-variant eller Apache Commons Library.
8. Konklusjon
Gjennom forskjellige implementeringsmetoder klarte vi å generere bundne og ubundne strenger ved hjelp av vanlig Java, en Java 8-variant eller Apache Commons Library.
I disse Java-eksemplene har vi brukt java.util.Random, men et poeng verdt å nevne er at det ikke er kryptografisk sikkert. Vurder å bruke java.security.SecureRandom i stedet for sikkerhetssensitive applikasjoner.
Implementeringen av alle disse eksemplene og utdragene finner du i GitHub-prosjektet. Dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre.