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

Друг много прост пример - този път ограничен String само с азбучни символи, но без предаване на булеви знамена в 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, така че трябва да е лесно да се импортира и стартира.