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.