У цьому підручнику ми покажемо, як генерувати випадковий рядок у 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, тому його слід легко імпортувати та запускати.