programing tip

Java에서 임의의 문자열을 생성하는 방법

itbloger 2020. 10. 31. 09:27
반응형

Java에서 임의의 문자열을 생성하는 방법


이 질문에 이미 답변이 있습니다.

라는 개체 StudentstudentName있고 studentId,, studentAddress등이 studentId있습니다.의 경우 7 개의 숫자 문자로 구성된 임의의 문자열을 생성해야합니다.

studentId = getRandomId();
studentId = "1234567" <-- from the random generator.

그리고 중복 ID가 없는지 확인해야합니다.


임의의 문자열을 생성하는 것은 쉽습니다 java.util.Random. 예를 들어 사용할 수있는 모든 문자가 포함 된 문자열을 사용 하면됩니다.

public static String generateString(Random rng, String characters, int length)
{
    char[] text = new char[length];
    for (int i = 0; i < length; i++)
    {
        text[i] = characters.charAt(rng.nextInt(characters.length()));
    }
    return new String(text);
}

이제 고유성을 위해 생성 된 문자열을 어딘가에 저장해야합니다. 이를 수행하는 방법은 나머지 애플리케이션에 따라 다릅니다.


이것은 매우 좋군요:

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RandomStringUtils.html - 같은 RandomStringUtils.randomNumeric(7).

10 ^ 7 동등 확률 ( java.util.Random파손되지 않은 경우 ) 고유 값이 있으므로 고유성이 문제가 될 수 있습니다.


32 비트 문자열의 임의 uuid를 반환하는 java.util 패키지의 UUID 클래스를 사용할 수도 있습니다.

java.util.UUID.randomUUID().toString()

http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html


Random ran = new Random();
int top = 3;
char data = ' ';
String dat = "";

for (int i=0; i<=top; i++) {
  data = (char)(ran.nextInt(25)+97);
  dat = data + dat;
}

System.out.println(dat);

다음 수업 코드가 도움이 될 것이라고 생각합니다. 멀티 스레딩을 지원하지만 동기화 블록을 제거하고 getRandomId () 메서드에 동기화하는 것과 같은 개선을 수행 할 수 있습니다.

public class RandomNumberGenerator {

private static final Set<String> generatedNumbers = new HashSet<String>();

public RandomNumberGenerator() {
}

public static void main(String[] args) {
    final int maxLength = 7;
    final int maxTry = 10;

    for (int i = 0; i < 10; i++) {
        System.out.println(i + ". studentId=" + RandomNumberGenerator.getRandomId(maxLength, maxTry));
    }
}

public static String getRandomId(final int maxLength, final int maxTry) {
    final Random random = new Random(System.nanoTime());
    final int max = (int) Math.pow(10, maxLength);
    final int maxMin = (int) Math.pow(10, maxLength-1);
    int i = 0;
    boolean unique = false;
    int randomId = -1;
    while (i < maxTry) {
        randomId = random.nextInt(max - maxMin - 1) + maxMin;

        synchronized (generatedNumbers) {
            if (generatedNumbers.contains(randomId) == false) {
                unique = true;
                break;
            }
        }
        i++;
    }
    if (unique == false) {
        throw new RuntimeException("Cannot generate unique id!");
    }

    synchronized (generatedNumbers) {
        generatedNumbers.add(String.valueOf(randomId));
    }

    return String.valueOf(randomId);
}

}

첫 번째 질문은 ID가 무작위로 필요한지 여부입니다. 때로는 순차 ID가 충분합니다.

Now, if you do need it to be random, we first note a generated sequence of numbers that contain no duplicates can not be called random. :p Now that we get that out of the way, the fastest way to do this is to have a Hashtable or HashMap containing all the IDs already generated. Whenever a new ID is generated, check it against the hashtable, re-generate if the ID already occurs. This will generally work well if the number of students is much less than the range of the IDs. If not, you're in deeper trouble as the probability of needing to regenerate an ID increases, P(generate new ID) = number_of_id_already_generated / number_of_all_possible_ids. In this case, check back the first paragraph (do you need the ID to be random?).

Hope this helps.


Many possibilities...

You know how to generate randomly an integer right? You can thus generate a char from it... (ex 65 -> A)

It depends what you need, the level of randomness, the security involved... but for a school project i guess getting UUID substring would fit :)

참고URL : https://stackoverflow.com/questions/2863852/how-to-generate-a-random-string-in-java

반응형