Java/기본

[java] java random string 만들기!

vmpo 2021. 10. 5. 01:18

java 에서 간단하게 random string을 만들 수 있는 방법을 확인해보겠습니다.

 

Random 클래스를 활용해서 간단하게 생성할 수 있습니다.

randim.ints()에 아스키코드값의 범위를 지정해줌으로써 랜덤으로 출력할 문자조합의 범위를 설정할 수 있습니다.

일단 기본적으로 숫자와 알파벳의 아스키코드값이 어떻게 설정되어 있는지 확인해 보겠습니다.

 

기본적으로 아래와 같습니다.

숫자 : 0~9

 ->아스키코드값 : 48~57

 

영문 a~z

-> 대문자 아스키코드값 :  65~90

-> 소문자 아스키코드값 :  97~122

 

1. 랜덤 알파벳 소문자 문자열 생성하기

Step.1.아스키코드 기준으로 숫자 97~122가 소문자 a~z로 까지 표현된다.

Step.2.그럼 이제 랜덤 문자열의 범위를 아스키코드값의 범위(97~122)로 제한해줍니다. rightLimit+1로 해주는 이유는 내부적으로 배열처리시 +1이 필요하게 되어 설정해줍니다. 내부 소스를 들어가보면 확인 가능하지만 여기서는 넘어가겠습니다.

Step.3. random.ints()는 intstream을 반환합니다. 이를 limit()으로 원하는 문자열 크기만큼 셋팅해줍니다. 저는 문자열의 길이를 10으로 지정하겠습니다.

Step.4. 최종적으로 collect() 메소드로 StringBuilder 객체를 생성해줍니다.

Step.5. 이제 StringBuilder 객체를 toString() 으로 문자열로 변환합니다.

 

참고. 대문자까지 포함하고 싶다면 대문자 아스키코드값의 범위가 65~90 이니깐 random.ints() 메소드의 첫번째 파라미터를 65로 설정하고, stream에서 필터를 걸어 아스키코드값의 범위를 제한 해주어야 합니다. 아래 문자열+알파벳 예시에서 확인 가능합니다.

  public static void Test_랜덤알파벳(){
    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);
  }

 

2. 랜덤 알파벳 +숫자 문자열 생성하기

 

Step.1.숫자의 경우 아스키코드로 변환시 48~57이 0~9로 표현됩니다.

Step.2.따라서 로직의 randim.ints() 메소드의 첫번째 파라미터를 48로 지정해준다. 두번째 파라미터는 알파벳의 제일끝이 122이므로 알파벳만 출력할때와 같이 122+1로 셋팅해줍니다.

Step.3.알파벳과 숫자만 출력되어야 하니깐 filter() 메소드를 활용해서 아스키코드의 범위를 제한 해줍니다.

Step.4.문자열 길이를 limit()메소드로 제한해줍니다.

Step.5.collect() 메소드로 StringBuilder 객체를 생성해줍니다.

Step.6. 이제 StringBuilder 객체를 toString() 으로 문자열로 변환합니다.

  public static void Test_랜덤숫자앏파벳() {
    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);
  }

 

출력결과는 아래와 같습니다.

LIST