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 기반 프로젝트이므로 가져오기 및 실행이 쉬워야 합니다.

Generic footer banner