1. 소개
이 예제에서는 먼저 표준 Java 라이브러리를 사용한 다음 Java 8 변형을 사용하고 마지막으로 Apache Commons Lang 라이브러리 를 사용하여 Java에서 랜덤의 문자열을 생성하는 방법을 배웁니다 .
이 기사는 여기 Baeldung 의 "Java – Back to Basic" 시리즈 의 일부입니다.
2. 일반 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);
}
새 문자열은 원격으로 영숫자가 아님을 명심하십시오.
3. 일반 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);
}
4. Java 8로 랜덤의 알파벳 문자열 생성
이제 JDK 8에 추가된 Random.ints 를 사용 하여 알파벳 문자열을 생성해 보겠습니다.
@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);
}
5. Java 8로 랜덤의 영숫자 문자열 생성
그런 다음 영숫자 문자열 을 얻기 위해 문자 집합을 확장할 수 있습니다 .
@Test
public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() {
int leftLimit = 48; // numeral '0'
int rightLimit = 122; // letter 'z'
int targetStringLength = 10;
Random random = new Random();
String generatedString = random.ints(leftLimit, rightLimit + 1)
.filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97))
.limit(targetStringLength)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
System.out.println(generatedString);
}
범위를 벗어난 문자를 피하기 위해 위 의 필터 방법 을 사용하여 65에서 90 사이의 유니코드 문자를 생략했습니다.
6. Apache Commons Lang으로 경계 무작위 문자열 생성
Apache의 Commons Lang 라이브러리는 랜덤의 문자열 생성에 많은 도움이 됩니다. 문자만 사용하여 제한된 문자열 을 생성하는 방법을 살펴보겠습니다 .
@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 예제의 모든 저수준 코드 대신 간단한 한 줄짜리 코드로 수행됩니다.
7. Apache Commons Lang으로 알파벳 문자열 생성
다음은 매우 간단한 또 다른 예입니다. 이번에 는 API에 부울 플래그를 전달하지 않고 알파벳 문자만 있는 제한된 문자열 입니다.
@Test
public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect() {
String generatedString = RandomStringUtils.randomAlphabetic(10);
System.out.println(generatedString);
}
8. Apache Commons Lang으로 영숫자 문자열 생성
마지막으로 동일한 랜덤의 경계 문자열 이 있지만 이번에는 숫자가 있습니다.
@Test
public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect() {
String generatedString = RandomStringUtils.randomAlphanumeric(10);
System.out.println(generatedString);
}
그리고 거기에 일반 Java, Java 8 변형 또는 Apache Commons Library를 사용하여 제한 및 제한되지 않은 문자열을 생성 합니다.
9. 결론
다양한 구현 방법을 통해 일반 Java, Java 8 변형 또는 Apache Commons Library를 사용하여 바인딩된 문자열과 바인딩되지 않은 문자열을 생성할 수 있었습니다.
이 Java 예제에서 우리는 java.util.Random 을 사용 했지만 언급할 가치가 있는 한 가지 점은 이것이 암호학적으로 안전하지 않다는 것입니다. Security에 민감한 애플리케이션 대신 java.security.SecureRandom 사용을 고려하십시오 .
이 모든 예제와 스니펫의 구현은 GitHub 프로젝트 에서 찾을 수 있습니다 . Maven 기반 프로젝트이므로 가져오기 및 실행이 쉬워야 합니다.