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.