В этом руководстве мы собираемся показать, как сгенерировать случайную строку в 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, поэтому его будет легко импортировать и запускать.