Java - Generați șir aleatoriu

În acest tutorial, vom arăta cum să generați un șir aleatoriu în Java - mai întâi folosind bibliotecile Java standard, apoi folosind o variantă Java 8 și, în cele din urmă, folosind biblioteca Apache Commons Lang.

Acest articol face parte din seria „Java - Înapoi la bază” aici de pe Baeldung.

1. Generați șir nelimitat aleatoriu cu Java simplu

Să începem simplu și să generăm un șir aleatoriu mărginit la 7 caractere:

@Test public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() { byte[] array = new byte[7]; // length is bounded by 7 new Random().nextBytes(array); String generatedString = new String(array, Charset.forName("UTF-8")); System.out.println(generatedString); }

Rețineți că noul șir nu va fi nimic alfanumeric de la distanță.

2. Generați șir alăturat aleatoriu cu Java simplu

În continuare - să ne uităm la crearea unui șir aleatoriu mai constrâns; vom genera un șir aleatoriu folosind litere alfabetice minuscule și o lungime setată:

@Test public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() { int leftLimit = 97; // letter 'a' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); StringBuilder buffer = new StringBuilder(targetStringLength); for (int i = 0; i < targetStringLength; i++) { int randomLimitedInt = leftLimit + (int) (random.nextFloat() * (rightLimit - leftLimit + 1)); buffer.append((char) randomLimitedInt); } String generatedString = buffer.toString(); System.out.println(generatedString); }

3. Generați șir alfabetic aleatoriu cu Java 8

Acum, să folosim Random.ints - adăugat în JDK 8 - pentru a genera un șir alfabetic :

@Test public void givenUsingJava8_whenGeneratingRandomAlphabeticString_thenCorrect() { int leftLimit = 97; // letter 'a' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); String generatedString = random.ints(leftLimit, rightLimit + 1) .limit(targetStringLength) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); System.out.println(generatedString); }

4. Generați șir alfanumeric aleatoriu cu Java 8

Și apoi ne putem lărgi setul de caractere pentru a obține un șir alfanumeric :

@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() 

Observați utilizarea metodei de filtrare de mai sus pentru a lăsa în afara caracterelor Unicode între 65 și 90 - pentru a evita caracterele din interval.

5. Generați șiruri aleatorii delimitate cu Apache Commons Lang

Biblioteca Commons Lang de la Apache ajută foarte mult la generarea de șiruri aleatorii. Să aruncăm o privire la generarea unui șir mărginit folosind doar litere :

@Test public void givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect() { int length = 10; boolean useLetters = true; boolean useNumbers = false; String generatedString = RandomStringUtils.random(length, useLetters, useNumbers); System.out.println(generatedString); }

Deci - în loc de tot codul de nivel scăzut din exemplul Java - acesta se face cu un simplu liner.

6. Generați șir alfabetic cu Apache Commons Lang

Un alt exemplu foarte simplu - de data aceasta un șir mărginit cu numai caractere alfabetice, dar fără a trece steaguri booleene în API:

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

7. Generați șir alfanumeric cu Apache Commons Lang

Și în sfârșit - același șir aleatoriu delimitat, dar de data aceasta - numeric:

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

Și acolo îl avem - crearea de șiruri delimitate și nelimitate fie cu Java simplu, o variantă Java 8, fie cu Biblioteca Apache Commons.

8. Concluzie

Prin diferite metode de implementare am reușit să generăm șiruri legate și nelegate, folosind Java simplu, o variantă Java 8 sau Biblioteca Apache Commons.

În aceste exemple Java, am folosit java.util.Random , dar un punct demn de menționat este că nu este sigur criptografic. Luați în considerare utilizarea java.security.SecureRandom în locul aplicațiilor sensibile la securitate.

Implementarea tuturor acestor exemple și fragmente poate fi găsită în proiectul GitHub. Acesta este un proiect bazat pe Maven, deci ar trebui să fie ușor de importat și rulat.