Java - generuj losowy ciąg

W tym samouczku pokażemy, jak wygenerować losowy ciąg w Javie - najpierw przy użyciu standardowych bibliotek Java, następnie przy użyciu wariantu Java 8, a na końcu przy użyciu biblioteki Apache Commons Lang.

Ten artykuł jest częścią serii „Java - Back to Basic” tutaj w Baeldung.

1. Wygeneruj losowy ciąg nieograniczony za pomocą zwykłej Java

Zacznijmy prosto i wygenerujmy losowy ciąg ograniczony do 7 znaków:

@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); }

Należy pamiętać, że nowy ciąg nie będzie niczym zdalnie alfanumerycznym.

2. Wygeneruj losowy ciąg ograniczony za pomocą zwykłej Java

Następnie - spójrzmy na tworzenie bardziej ograniczonego losowego ciągu; mamy zamiar wygenerować losowy ciąg przy użyciu małych liter alfabetu i określonej długości:

@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. Wygeneruj losowy ciąg alfabetyczny za pomocą języka Java 8

Teraz użyjmy Random.ints - dodanego w JDK 8 - aby wygenerować alfabetyczny ciąg:

@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. Wygeneruj losowy ciąg alfanumeryczny za pomocą języka Java 8

Następnie możemy rozszerzyć nasz zestaw znaków, aby uzyskać alfanumeryczny ciąg:

@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() 

Zwróć uwagę na użycie powyższej metody filtrującej , aby pominąć znaki Unicode od 65 do 90 - aby uniknąć znaków spoza zakresu.

5. Wygeneruj losowy ciąg ograniczony za pomocą Apache Commons Lang

Biblioteka Commons Lang z Apache bardzo pomaga w losowym generowaniu ciągów. Rzućmy okiem na generowanie ograniczonego łańcucha przy użyciu samych liter :

@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); }

Tak więc - zamiast całego kodu niskiego poziomu w przykładzie Java - ten jest wykonywany za pomocą prostego, jednowierszowego kodu.

6. Wygeneruj ciąg alfabetyczny za pomocą Apache Commons Lang

Kolejny bardzo prosty przykład - tym razem ograniczony łańcuch zawierający tylko znaki alfabetu, ale bez przekazywania flag logicznych do API:

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

7. Wygeneruj ciąg alfanumeryczny za pomocą Apache Commons Lang

I wreszcie - ten sam losowy ograniczony String, ale tym razem - numeryczny:

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

I oto mamy to - tworzenie ograniczonych i nieograniczonych ciągów za pomocą zwykłej Javy, wariantu Java 8 lub Apache Commons Library.

8. Wniosek

Dzięki różnym metodom implementacji byliśmy w stanie wygenerować powiązane i niezwiązane ciągi, używając zwykłej Javy, wariantu Java 8 lub biblioteki Apache Commons.

W tych przykładach Java użyliśmy java.util.Random , ale warto wspomnieć o tym, że nie jest on bezpieczny kryptograficznie. Rozważ użycie java.security.SecureRandom zamiast aplikacji wrażliwych na bezpieczeństwo.

Implementację wszystkich tych przykładów i fragmentów można znaleźć w projekcie GitHub. Jest to projekt oparty na Maven, więc powinien być łatwy do zaimportowania i uruchomienia.