Создание случайной строки с A-Z и 0-9 в Java
Как следует из названия, мне нужно создать случайный идентификатор длиной 17 символов. Что-то вроде "AJB53JHS232ERO0H1
". Порядок букв и цифр также случайный. Я думал о создании массива с буквами A-Z и переменной "check", которая randoms до 1-2
. И в цикле;
Randomize 'check' to 1-2.
If (check == 1) then the character is a letter.
Pick a random index from the letters array.
else
Pick a random number.
Но я чувствую, что есть более простой способ сделать это. Есть?
Ответы
Ответ 1
Здесь вы можете использовать мой метод для создания Random String
protected String getSaltString() {
String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
StringBuilder salt = new StringBuilder();
Random rnd = new Random();
while (salt.length() < 18) { // length of the random string.
int index = (int) (rnd.nextFloat() * SALTCHARS.length());
salt.append(SALTCHARS.charAt(index));
}
String saltStr = salt.toString();
return saltStr;
}
Вышеуказанный метод из моего мешка, используемого для генерации строки солей для целей входа.
Ответ 2
RandomStringUtils
от Apache commons-lang может помочь:
RandomStringUtils.randomAlphanumeric(17).toUpperCase()
Обновление 2017: RandomStringUtils
устарело, теперь вы должны использовать RandomStringGenerator.
Ответ 3
Три шага для реализации вашей функции:
Шаг # 1 Вы можете указать строку, включая символы A-Z и 0-9.
Как.
String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
Шаг # 2 Затем, если вы хотите создать случайную char из этой строки-кандидата. Вы можете использовать
candidateChars.charAt(random.nextInt(candidateChars.length()));
Шаг # 3 Наконец, укажите длину произвольной строки, которая будет сгенерирована (в вашем описании это 17).
Writer для цикла и добавьте случайные символы, сгенерированные на шаге 2, в объект StringBuilder.
Исходя из этого, вот пример открытый класс RandomTest {
public static void main(String[] args) {
System.out.println(generateRandomChars(
"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", 17));
}
/**
*
* @param candidateChars
* the candidate chars
* @param length
* the number of random chars to be generated
*
* @return
*/
public static String generateRandomChars(String candidateChars, int length) {
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < length; i++) {
sb.append(candidateChars.charAt(random.nextInt(candidateChars
.length())));
}
return sb.toString();
}
}
Ответ 4
Вы можете легко сделать это с помощью цикла for,
public static void main(String[] args) {
String aToZ="ABCD.....1234"; // 36 letter.
String randomStr=generateRandom(aToZ);
}
private static String generateRandom(String aToZ) {
Random rand=new Random();
StringBuilder res=new StringBuilder();
for (int i = 0; i < 17; i++) {
int randIndex=rand.nextInt(aToZ.length());
res.append(aToZ.charAt(randIndex));
}
return res.toString();
}