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 '..를 문자로 생각한다고 가정하고 원하는 것을 처리해야합니다.
'programing' 카테고리의 다른 글
C에서 값을 교환하는 가장 빠른 방법은 무엇입니까? (0) | 2021.01.16 |
---|---|
일부 조각에서 MenuItem 숨기기 (0) | 2021.01.16 |
더 나은 점 : DataSet 또는 DataReader? (0) | 2021.01.16 |
검색 버튼을 표시하거나 키보드에서 버튼을 입력하도록 edittext를 설정하는 방법은 무엇입니까? (0) | 2021.01.16 |
'for'루프에서 1 씩 증가 할 때 포맷팅 뒤에 기술적 인 이유는 무엇입니까? (0) | 2021.01.16 |