티스토리 뷰

이 페이지는 문자, 숫자 등으로 이루어진 랜덤 문자열을 생성하는 방법을 설명하고 있다.


# 랜덤 숫자(난수) 생성

 

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 랜덤한 숫자를 출력하고 그에 맞게 대문자, 소문자, 숫자를 차례로 랜덤하게 추가한다.

댓글
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday