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