Frudy
7k
2019-05-29 11:03:16 작성 2019-05-29 11:07:57 수정됨
0
426

Java Random하게 문자열을 생성하는 라이브러리


랜덤하게 문자열 만들고싶으신분이 질문을 올려주셨는대,

겸사겸사 여기에 공유할게요.

이거 만든사람이 학생인만큼 잘못된 부분이 있을 수 있습니다.


https://okky.kr/article/585125 질문 원글



package myutil.string;

public class CreateRandom 
{
	/**
	 * 이 클래스의 모든 메소드는 static method 이므로, 생성자를 호출할 필요가 없습니다.
	 */
	private CreateRandom() {}
	
	public static char getRandomNumber()
	{
		return (char)((int)(Math.random() * 10) + 48);
	}
	
	public static char getRandomCapitalLetter()
	{
		return (char)((int)(Math.random() * 26) + 65);
	}

	public static char getRandomLowerLetter()
	{
		return (char)((int)(Math.random() * 26) + 97);
	}
	
	public static char getRandomSpecialCharacter()
	{
		int caseNum = (int)(Math.random() *4);
		char result = 0;

		if(caseNum == 0)
			result = (char)((int)(Math.random() * 16) + 32); 

		else if(caseNum == 1)
			result = (char)((int)(Math.random() * 7) + 58); 

		else if(caseNum == 2)
			result = (char)((int)(Math.random() * 6) + 91); 

		else if(caseNum == 3)
			result = (char)((int)(Math.random() * 4) + 123);
		
		return result;
	}
}

랜덤한 문자를 만드는 클래스



public class CreateString 
{
	private CreateString() {}
	
	/**
	 * 랜덤한 문자열을 문자열 갯수만큼 반환합니다. 문자 종류를 선택할 수 있습니다.
	 */
	public static String getRandomString(StringType stringType, int length)
	{
		StringBuffer buf = new StringBuffer("");
		
		try
		{
			switch(stringType)
			{
			case ASCII_CODE:
				for(int i = 0 ; i < length ; i++)
				{
					int caseNum = (int)(Math.random() *4);

					if(caseNum == 0)
						buf.append(CreateRandom.getRandomNumber()); 

					else if(caseNum == 1)
						buf.append(CreateRandom.getRandomCapitalLetter()); 

					else if(caseNum == 2)
						buf.append(CreateRandom.getRandomLowerLetter()); 
					
					else if(caseNum == 3)
						buf.append(CreateRandom.getRandomSpecialCharacter()); 
				}
				break;
				
			case ALPHABET_OR_NUMBER:
				for(int i = 0 ; i < length ; i++)
				{
					int caseNum = (int)(Math.random() *3);

					if(caseNum == 0)
						buf.append(CreateRandom.getRandomNumber()); 

					else if(caseNum == 1)
						buf.append(CreateRandom.getRandomCapitalLetter()); 

					else if(caseNum == 2)
						buf.append(CreateRandom.getRandomLowerLetter()); 
				}
				break;
				
			case ALPHABET:
				for(int i = 0 ; i < length ; i++)
				{
					int caseNum = (int)(Math.random() *2);

					if(caseNum == 0)
						buf.append(CreateRandom.getRandomLowerLetter()); 

					else if(caseNum == 1)
						buf.append(CreateRandom.getRandomCapitalLetter()); 
				}
				break;
				
			case LOWER_LETTER:
				for(int i = 0 ; i < length ; i++)
					buf.append(CreateRandom.getRandomLowerLetter()); 
				break;
				
			case CAPITAL_LETTER:
				for(int i = 0 ; i < length ; i++)
					buf.append(CreateRandom.getRandomCapitalLetter()); 
				break;
				
			case NUMBER:
				for(int i = 0 ; i < length ; i++)
					buf.append(CreateRandom.getRandomNumber()); 
				break;
				
			case SPECIAL_CHARACTER:
				for(int i = 0 ; i < length ; i++)
					buf.append(CreateRandom.getRandomSpecialCharacter());
				break;
			}
			
		}catch(OutOfMemoryError e)
		{
			System.err.println("OOME 발생");
			return buf.toString();
		}
		
		return buf.toString();
	}
	
	public static void main(String[] args) 
	{
		StringBuffer buf = new StringBuffer("");
		String alphabet3 = CreateString.getRandomString(StringType.ALPHABET, 3);
		String number3 = CreateString.getRandomString(StringType.NUMBER, 3);
		
		buf.append(alphabet3);
		buf.append("/");
		buf.append(number3);
		System.out.println(buf.toString());
	}
}



위 클래스로 랜덤한 문자열을 만드는 클래스 + 사용예제

package myutil.string;

/**
 * <pre>
 * CAPITAL_LETTER : 알파벳의 대문자에 해당됩니다.
 * LOWER_LETTER : 알파벳의 소문자에 해당됩니다.
 * ALPHABET : 소문자와 대문자에 해당됩니다.
 * NUMBER : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9에 해당됩니다.
 * ALPHABET_OR_NUMBER : 알파벳 혹은 숫자에 해당됩니다.
 * SPECIAL_CHARACTER : 특수문자에 해당되며, 정의는, Ascii Code표에서 숫자, 알파벳이 아니면 특수문자라고 가정합니다.
 * ASCII_CODE : 아스키코드값이 0이상 127이하인 문자에 해당됩니다.
 * </pre>
 */
public enum StringType
{
	/**
	 * 알파벳의 대문자에 해당됩니다.
	 */
	CAPITAL_LETTER, 
	
	/**
	 * 알파벳의 소문자에 해당됩니다.
	 */
	LOWER_LETTER, 
	
	/**
	 * 소문자와 대문자에 해당됩니다.
	 */
	ALPHABET, 

	/**
	 * 0, 1, 2, 3, 4, 5, 6, 7, 8, 9에 해당됩니다.
	 */
	NUMBER, 
	
	/**
	 * 알파벳 혹은 숫자에 해당됩니다.
	 */
	ALPHABET_OR_NUMBER, 

	/**
	 * 특수문자에 해당되며, 정의는, Ascii Code표에서 숫자, 알파벳이 아니면 특수문자라고 가정합니다.
	 */
	SPECIAL_CHARACTER, 
	
	/**
	 * 아스키코드값이 0이상 127이하인 문자에 해당됩니다.
	 */
	ASCII_CODE
}


그리고 거기에 사용되는 enum 클래스입니다.

0
  • 댓글 0

  • 로그인을 하시면 댓글을 등록할 수 있습니다.