Java - генерировать случайную строку

В этом руководстве мы собираемся показать, как сгенерировать случайную строку в Java - сначала с использованием стандартных библиотек Java, затем с использованием варианта Java 8 и, наконец, с помощью библиотеки Apache Commons Lang.

Эта статья является частью серии «Java - Back to Basic» здесь, на Baeldung.

1. Сгенерируйте случайную неограниченную строку с помощью простой Java

Давайте начнем с простого и сгенерируем случайную строку, ограниченную 7 символами:

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

Имейте в виду, что в новой строке не будет ничего отдаленно буквенно-цифрового.

2. Сгенерируйте случайную ограниченную строку с помощью простой Java

Далее - давайте посмотрим на создание более ограниченной случайной строки; мы собираемся сгенерировать случайную строку, используя строчные буквы алфавита и заданную длину:

@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. Создайте случайную буквенную строку с помощью Java 8

Теперь давайте воспользуемся Random.ints, добавленным в JDK 8, для создания буквенной строки:

@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. Сгенерируйте случайную буквенно-цифровую строку с помощью Java 8

А затем мы можем расширить наш набор символов, чтобы получить буквенно-цифровую строку:

@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() 

Обратите внимание на использование вышеупомянутого метода фильтрации, чтобы исключить символы Unicode от 65 до 90 - чтобы избежать символов вне диапазона.

5. Сгенерируйте ограниченную случайную строку с помощью Apache Commons Lang

Библиотека Commons Lang от Apache очень помогает при генерации случайных строк. Давайте посмотрим, как создать ограниченную строку, используя только буквы :

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

Итак - вместо всего низкоуровневого кода в примере Java - этот выполняется с помощью простого однострочника.

6. Создайте буквенную строку с помощью Apache Commons Lang

Другой очень простой пример - на этот раз ограниченная строка только с алфавитными символами, но без передачи логических флагов в API:

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

7. Создайте буквенно-цифровую строку с помощью Apache Commons Lang.

И наконец - та же случайная ограниченная строка, но на этот раз числовая:

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

И вот оно, создание ограниченных и неограниченных строк с помощью простой Java, варианта Java 8 или библиотеки Apache Commons.

8. Заключение

С помощью различных методов реализации мы могли генерировать связанные и несвязанные строки, используя простую Java, вариант Java 8 или библиотеку Apache Commons.

В этих примерах Java мы использовали java.util.Random , но стоит упомянуть один момент: он не является криптографически безопасным. Вместо этого рассмотрите возможность использования java.security.SecureRandom для приложений, чувствительных к безопасности.

Реализацию всех этих примеров и фрагментов можно найти в проекте GitHub. Это проект на основе Maven, поэтому его будет легко импортировать и запускать.