2012-06-06 4 views
0

Java에서 지정된 길이와 문자의 임의의 String을 생성하는 좋은 방법을 알고있는 사람이 있습니까?지정된 문자 만 포함하는 지정된 길이의 임의의 문자열 생성 (Java)

예를 들어 '길이'는 5 일 수 있으며 'possibleChars'는 'a, b, c, 1,2,3 ,!'일 수 있습니다.

그래서

다! A1B이 유효

하지만

cba16는 없습니다.

...

어떤 아이디어를 내가 처음부터 뭔가를 작성하려고 할 수 있지만,이 등, 쿠폰 코드를 생성, 암호를 생성 같은 것들에 대한 일반적인 사용 사례 있어야합니다 같은 느낌?

+3

허용되는 문자의 배열을 만듭니다. 배열에 임의의 인덱스를 생성합니다. 당신이 충분한 캐릭터를 가질 때까지 계속 가라. – TimK

답변

2

당신이 뭔가를 원해?

Random r=new Random(); 

char[] possibleChars="abc123!".toCharArray(); 
int length=5; 

char[] newPassword=new char[length]; 

for (int i=0; i<length;i++) 
    newPassword[i]=possibleChars[r.nextInt(possibleChars.length)]; 

System.out.println(new String(newPassword)); 
2

코드는 매우 짧습니다. N 개의 유효한 문자를 가진 char [] 또는 String을 가지며 길이가 0에서 N-1 사이의 임의의 숫자 R을 선택하고 R을 사용하여 생성 된 String에 추가 할 문자를 선택합니다.

1

그것은이다

... 나는 처음부터 뭔가를 작성하려고 할 수 있지만,이 등, 암호를 생성 쿠폰 코드를 생성 같은 것들에 대한 일반적인 사용 사례 있어야합니다 같은 느낌 그 공통점은 아니며 상세한 요구 사항은 매번 다릅니다. 게다가, 코드는 사소한 점에서 간단합니다. (솔루션보다는 요구 사항에 대한 실제 사항 인 ...).

요약하면 이렇게하는 기존의 라이브러리 방법을 찾는 것보다 자신의 메서드를 작성하는 것이 빠릅니다.


난수가 포함 된 체계를 사용할 때 충돌이 발생할 가능성을 알고 있어야합니다. 즉, 상기 방법은 둘 이상의 경우에 동일한 랜덤 스트링을 생성 할 것이다. 긴 문자열을 사용하여이를 완화 할 수 있지만 임의의 수 생성기에 따라 특정 지점에서만 작동합니다. (일반적인 난수 생성기는 실제로 의사 난수 생성기이며 결국 순환하는 숫자 시퀀스를 생성하며 완벽한 난수 생성기를 사용하더라도 짧은 시퀀스에 대해 반복 가능성이 있습니다.)

사실, 이것은 당신의 문제에 대한 "하나의 크기가 모두 맞는"해결책이 좋은 생각이 아닌 또 다른 이유입니다.

1

이것은 숙제 나 프로그래밍 연습과는 달리 실제 보안을위한 것이라면 무작위가 아닌 SecureRandom을 사용하십시오.

무작위 암호 및 기타 생성에 대한 많은 좋은 아이디어는 Diceware 웹 사이트를 참조하십시오.

관련 문제