正如标题所示,我需要创建一个随机的,长度为17个字符的ID.像" AJB53JHS232ERO0H1" 这样的东西.字母和数字的顺序也是随机的.我想创建一个带有字母AZ和'check'变量的数组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.
Run Code Online (Sandbox Code Playgroud)
但我觉得有一种更简单的方法可以做到这一点.在那儿?
Sur*_*tta 99
在这里,您可以使用我的方法生成随机字符串
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;
}
Run Code Online (Sandbox Code Playgroud)
上面的方法从我的包里用来生成一个用于登录的盐字符串.
小智 75
RandomStringUtils 来自Apache commons-lang可能有所帮助:
RandomStringUtils.randomAlphanumeric(17).toUpperCase()
Run Code Online (Sandbox Code Playgroud)
2017更新:RandomStringUtils已被弃用,您现在应该使用RandomStringGenerator.
Mou*_*ava 11
实现您的功能的三个步骤:
步骤#1您可以指定一个字符串,包括字符AZ和0-9.
喜欢.
String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
Run Code Online (Sandbox Code Playgroud)
步骤#2然后,如果您想从此候选字符串生成随机字符.您可以使用
candidateChars.charAt(random.nextInt(candidateChars.length()));
Run Code Online (Sandbox Code Playgroud)
步骤#3最后,指定要生成的随机字符串的长度(在您的描述中,它是17).编写一个for循环并将步骤#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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用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();
}
Run Code Online (Sandbox Code Playgroud)