Java - Створення випадкової рядка

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

Ця стаття є частиною серії "Java - Назад до основного" тут, на 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, тому його слід легко імпортувати та запускати.