programing

Java에서 임의의 문자를 생성하는 기능이 있습니까?

coolbiz 2021. 1. 16. 10:14
반응형

Java에서 임의의 문자를 생성하는 기능이 있습니까?


Java에 임의의 문자 또는 문자열을 생성하는 기능이 있습니까? 아니면 단순히 임의의 정수를 선택하고 그 정수의 ASCII 코드를 문자로 변환해야합니까?


이를 수행하는 방법은 여러 가지가 있지만 예, 임의 생성 int(예 : 사용 java.util.Random.nextInt) 한 다음이를 사용하여 char. 특정 알파벳이 있으면 다음과 같은 것이 멋집니다.

    import java.util.Random;

    //...

    Random r = new Random();

    String alphabet = "123xyz";
    for (int i = 0; i < 50; i++) {
        System.out.println(alphabet.charAt(r.nextInt(alphabet.length())));
    } // prints 50 random characters from alphabet

참고 수행 java.util.Random사실입니다 의사 - 랜덤 번호 생성기 다소 약한 기반으로 선형 합동 공식을 . 암호화의 필요성을 언급하셨습니다. 이 경우 훨씬 더 강력한 암호화 보안 의사 난수 생성기 (예 :) 의 사용을 조사 할 수 있습니다 java.security.SecureRandom.


az에서 임의의 문자를 생성하려면 :

Random r = new Random();
char c = (char)(r.nextInt(26) + 'a');

Apache Commons 프로젝트에서 RandomStringUtils를 사용할 수도 있습니다.

RandomStringUtils.randomAlphabetic(stringLength);

private static char rndChar () {
    int rnd = (int) (Math.random() * 52); // or use Random or whatever
    char base = (rnd < 26) ? 'A' : 'a';
    return (char) (base + rnd % 26);

}

az, AZ 범위의 값을 생성합니다.


String abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char letter = abc.charAt(rd.nextInt(abc.length()));

이것도 작동합니다.


다음 97 ascii 값 작은 "a".

public static char randomSeriesForThreeCharacter() {
Random r = new Random();
char random_3_Char = (char) (97 + r.nextInt(3));
return random_3_Char;
}

a, b, c 또는 d에 대해 위의 3 숫자에서 u가 a에서 z와 같은 모든 문자를 원한다면 3 숫자를 25로 바꿉니다.


Quickcheck 사양 기반 테스트 프레임 워크의 생성기를 사용할 수 있습니다 .

임의의 문자열을 만들려면 anyString 메서드를 사용 하십시오 .

String x = anyString();

보다 제한된 문자 집합 또는 최소 / 최대 크기 제한을 사용하여 문자열을 만들 수 있습니다.

일반적으로 여러 값으로 테스트를 실행합니다.

@Test
public void myTest() {
  for (List<Integer> any : someLists(integers())) {
    //A test executed with integer lists
  }
}

달러 사용 :

Iterable<Character> chars = $('a', 'z'); // 'a', 'b', c, d .. z

chars"셔플 된"문자 범위를 만들 수 있다는 점을 감안할 때 :

Iterable<Character> shuffledChars = $('a', 'z').shuffle();

그런 다음 첫 번째 n문자 를 취하면 임의의 length 문자열을 얻습니다 n. 최종 코드는 간단합니다.

public String randomString(int n) {
    return $('a', 'z').shuffle().slice(n).toString();
}

주의 : 조건 n > 0다음과 같습니다.slice

편집하다

Steve가 올바르게 지적했듯이 randomString각 문자는 최대 한 번만 사용합니다. 해결 방법으로 m전화하기 전에 알파벳 시간을 반복 할 수 있습니다 shuffle.

public String randomStringWithRepetitions(int n) {
    return $('a', 'z').repeat(10).shuffle().slice(n).toString();
}

또는 다음과 같이 알파벳을 제공하십시오 String.

public String randomStringFromAlphabet(String alphabet, int n) {
    return $(alphabet).shuffle().slice(n).toString();
}

String s = randomStringFromAlphabet("00001111", 4);

이 시도..

public static String generateCode() {

    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String fullalphabet = alphabet + alphabet.toLowerCase() + "123456789";
    Random random = new Random();

    char code = fullalphabet.charAt(random.nextInt(9));

    return Character.toString(code);

}

이것은 간단하지만 유용한 발견입니다. 특정 유형의 문자를 무작위로 가져 오기 위해 5 개의 오버로드 된 메소드로 RandomCharacter 라는 클래스를 정의합니다 . 향후 프로젝트에서 이러한 방법을 사용할 수 있습니다.

    public class RandomCharacter {
    /** Generate a random character between ch1 and ch2 */
    public static char getRandomCharacter(char ch1, char ch2) {
        return (char) (ch1 + Math.random() * (ch2 - ch1 + 1));
    }

    /** Generate a random lowercase letter */
    public static char getRandomLowerCaseLetter() {
        return getRandomCharacter('a', 'z');
    }

    /** Generate a random uppercase letter */
    public static char getRandomUpperCaseLetter() {
        return getRandomCharacter('A', 'Z');
    }

    /** Generate a random digit character */
    public static char getRandomDigitCharacter() {
        return getRandomCharacter('0', '9');
    }

    /** Generate a random character */
    public static char getRandomCharacter() {
        return getRandomCharacter('\u0000', '\uFFFF');
    }
}

작동 방식을 보여주기 위해 175 개의 임의 소문자를 표시하는 다음 테스트 프로그램을 살펴 보겠습니다.

public class TestRandomCharacter {
    /** Main method */
    public static void main(String[] args) {
        final int NUMBER_OF_CHARS = 175;
        final int CHARS_PER_LINE = 25;
        // Print random characters between 'a' and 'z', 25 chars per line
        for (int i = 0; i < NUMBER_OF_CHARS; i++) {
            char ch = RandomCharacter.getRandomLowerCaseLetter();
            if ((i + 1) % CHARS_PER_LINE == 0)
                System.out.println(ch);
            else
                System.out.print(ch);
        }
    }
}

출력은 다음과 같습니다.

여기에 이미지 설명 입력

다시 한 번 실행하면 :

여기에 이미지 설명 입력

저는 Y. Daniel Liang 의 저서 Introduction to Java Programming, Comprehensive Version, 10th Edition 에서이 지식을 인용하고 프로젝트에 사용했습니다.

Note: If you are unfamiliar with overloaded methhods, in a nutshell Method Overloading is a feature that allows a class to have more than one method having the same name, if their argument lists are different.


Take a look at Java Randomizer class. I think you can randomize a character using the randomize(char[] array) method.


My propose for generating random string with mixed case like: "DthJwMvsTyu".
This algorithm based on ASCII codes of letters when its codes a-z (97 to 122) and A-Z (65 to 90) differs in 5th bit (2^5 or 1 << 5 or 32).

random.nextInt(2): result is 0 or 1.

random.nextInt(2) << 5: result is 0 or 32.

Upper A is 65 and lower a is 97. Difference is only on 5th bit (32) so for generating random char we do binary OR '|' random charCaseBit (0 or 32) and random code from A to Z (65 to 90).

public String fastestRandomStringWithMixedCase(int length) {
    Random random = new Random();
    final int alphabetLength = 'Z' - 'A' + 1;
    StringBuilder result = new StringBuilder(length);
    while (result.length() < length) {
        final char charCaseBit = (char) (random.nextInt(2) << 5);
        result.append((char) (charCaseBit | ('A' + random.nextInt(alphabetLength))));
    }
    return result.toString();
}

Here is the code to generate random alphanumeric code. First you have to declare a string of allowed characters what you want to include in random number.and also define max length of string

 SecureRandom secureRandom = new SecureRandom();
 String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
    StringBuilder generatedString= new StringBuilder();
    for (int i = 0; i < MAXIMUM_LENGTH; i++) {
        int randonSequence = secureRandom .nextInt(CHARACTERS.length());
        generatedString.append(CHARACTERS.charAt(randonSequence));
    }

Use toString() method to get String from StringBuilder


polygenelubricants' answer is also a good solution if you only want to generate Hex values:

/** A list of all valid hexadecimal characters. */
private static char[] HEX_VALUES = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F' };

/** Random number generator to be used to create random chars. */
private static Random RANDOM = new SecureRandom();

/**
 * Creates a number of random hexadecimal characters.
 * 
 * @param nValues the amount of characters to generate
 * 
 * @return an array containing <code>nValues</code> hex chars
 */
public static char[] createRandomHexValues(int nValues) {
    char[] ret = new char[nValues];
    for (int i = 0; i < nValues; i++) {
        ret[i] = HEX_VALUES[RANDOM.nextInt(HEX_VALUES.length)];
    }
    return ret;
}

If you don't mind adding a new library in your code you can generate characters with MockNeat (disclaimer: I am one of the authors).

MockNeat mock = MockNeat.threadLocal();

Character chr = mock.chars().val();
Character lowerLetter = mock.chars().lowerLetters().val();
Character upperLetter = mock.chars().upperLetters().val();
Character digit = mock.chars().digits().val();
Character hex = mock.chars().hex().val(); 

   Random randomGenerator = new Random();

   int i = randomGenerator.nextInt(256);
   System.out.println((char)i);

'0,'1 ','2 '..를 문자로 생각한다고 가정하고 원하는 것을 처리해야합니다.

참조 URL : https://stackoverflow.com/questions/2626835/is-there-functionality-to-generate-a-random-character-in-java

반응형