티스토리 뷰
이 페이지는 문자, 숫자 등으로 이루어진 랜덤 문자열을 생성하는 방법을 설명하고 있다.
# 랜덤 숫자(난수) 생성
1. java.lang.Math.random() 함수
Math.random() 메서드는 0.0 과 1.0 사이의 double 값을 생성하기 때문에, 정수를 얻고 싶다면 반드시 int형으로 캐스팅시켜야한다.
import java.lang.Math;
double d = Math.random()*10;
System.out.println("double: " + d); // double: 7.241387938681597
int i = (int)(Math.random()*10);
System.out.println("int: " +i); // int: 3
2. import java.util.Random 클래스
import java.util.Random;
Random rand = new Random();
int i = rand.nextInt(10); // 0~9까지의 정수
System.out.println("int: " + i); // int: 2
float f = rand.nextFloat(); // 0.0f 에서 1.0f 까지의 실수
System.out.println("float: " + f); //float: 0.23841155
boolean b = rand.nextBoolean(); // true(참), false(거짓)
System.out.println("boolean: " + b); // boolean: false
# 랜덤 알파벳 문자 (A-Z, a-z) 생성
1. hard coding(bad example)
import java.util.Random;
Random rand = new Random();
String abc1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char uc = abc1.charAt(rand.nextInt(abc1.length())); // 랜덤 대문자
System.out.println(uc); // Y
String abc2 = "abcdefghijklmnopqrstuvwxyz";
char lc = abc2.charAt(rand.nextInt(abc2.length())); // 랜덤 소문자
System.out.println(lc); // t
알파벳은 영대문자, 영소문자 각각 26개로 확실히 정의되어 있기 때문에 하드코딩으로 작업해도 무리없이 작성할 수는 있다.
하지만, 좋은 코드가 아니기 때문에 다른 함수나 클래스를 이용하려한다.
코딩에 앞서 아래 두 개의 예시에서 사용되는 기본적인 지식이 필요하다.
아스키코드에서 영대문자는 65-90, 영소문자는 97-122이다.
26까지의 난수를 구한 후 65를 더한 후 대문자를, 97을 더하면 소문자를 얻을 수 있다.
또한, int 타입의 숫자를 char 타입으로 변환하면 ASCII 코드 문자를 얻을 수 있다.
2.java.lang.Math.random() 함수
import java.lang.Math;
char uc = (char)((int)(Math.random()*26+65)); // 랜덤 대문자
System.out.println(uc); // E
char lc = (char)((int)(Math.random()*26+97)); // 랜덤 소문자
System.out.println(lc); // k
3.import java.util.Random 클래스
Random rand = new Random();
char uc = (char)(rand.nextInt(26) + 'A' ); // 랜덤한 대문자
System.out.println(uc); // H
char lc = (char)(rand.nextInt(26) + 'a'); // 랜덤한 소문자
System.out.println(lc); // f
이 코드를 사용할 때 주의해야 할 사항은 char 타입으로 처리가 되기 때문에, A와 a는 작은 따옴표로 감싸줘야한다.
큰 따옴표("")는 문자열 String, 작은 따옴표('')는 문자 char 타입이기 때문에 아래 에러를 리턴할 수도 있다.
error: incompatible types: String cannot be converted to char
참고로, char타입의 문자를 string으로 변환하고 싶을때는 String.valueOf(char) 또는 Character.toString(char)를 사용할 수 있다.
char c = 'a';
String s = Character.toString(c);
System.out.println(s.getClass().getName()); // java.lang.String
String ss = String.valueOf(c);
System.out.println(ss.getClass().getName()); // java.lang.String
# 영문, 숫자 혼합 랜덤 문자열 생성 예제 (10자리)
import java.util.Random;
Random rand = new Random();
StringBuffer sb = new StringBuffer();
for(int i = 0; i < 10; i ++) {
int index = rand.nextInt(3);
switch(index) {
case 0:
sb.append((char)(rand.nextInt(26) + 97));
break;
case 1:
sb.append((char)(rand.nextInt(26) + 65));
break;
case 2:
sb.append(rand.nextInt(10));
break;
}
}
System.out.println(sb); // X36Kq06S0G
for문을 이용하여 10자리를 생성한다.
10번을 도는동안 rand.nextInt(3)을 이용해 0, 1, 2 랜덤한 숫자를 출력하고 그에 맞게 대문자, 소문자, 숫자를 차례로 랜덤하게 추가한다.
'Programming > Java' 카테고리의 다른 글
[JAVA] Get Orientation Metadata and Rotate Image (0) | 2019.09.18 |
---|---|
[JAVA] Converting MultipartFile to File (2) | 2019.09.17 |
[JAVA] Get User Agent And IP Information (0) | 2019.09.15 |
[Spring] Get data from excel file (0) | 2019.01.20 |
[Spring] How to get AWS S3 bucket list (0) | 2019.01.14 |