在 java 中生成随机字符串
Generate Random String in java
我正在尝试使用 Secure Random 在 java 中的大写字母 A-Z 之间生成一个字符串。目前我能够生成一个带有特殊字符的字母数字字符串,但我想要一个只有大写字母的字符串。
public String createRandomCode(int codeLength, String id){
char[] chars = id.toCharArray();
StringBuilder sb = new StringBuilder();
Random random = new SecureRandom();
for (int i = 0; i < codeLength; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
String output = sb.toString();
System.out.println(output);
return output ;
}
输入参数是输出字符串的长度和 id,它是字母数字 string.Can不明白要对上述代码进行哪些修改以仅生成大写字母字符串。请帮助..
这是我编写并使用的生成器:
public class RandomGenerator {
private static final String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String generateRandom(int length) {
Random random = new SecureRandom();
if (length <= 0) {
throw new IllegalArgumentException("String length must be a positive integer");
}
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append(characters.charAt(random.nextInt(characters.length())));
}
return sb.toString();
}
}
在numChars
字符串中你可以放入任何你想包含的字符。 int length
参数为生成的随机字符串的长度
这是一个示例方法,它使用字符 A 到 Z 的 int 范围(此方法还避免了 String
中的重复字符):
public String createRandomCode(final int codeLength) {
int min = 65;// A
int max = 90;// Z
StringBuilder sb = new StringBuilder();
Random random = new SecureRandom();
for (int i = 0; i < codeLength; i++) {
Character c;
do {
c = (char) (random.nextInt((max - min) + 1) + min);
} while (sb.indexOf(c.toString()) > -1);
sb.append(c);
}
String output = sb.toString();
System.out.println(output);
return output;
}
范围部分来自这个主题:Generating random integers in a specific range
您的方法从 id
参数中随机 selects 个字符。如果您希望这些仅是大写字母,则传递包含这些字符的字符串:
String randomCode = createRandomCode(length, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
EDIT 如果你想避免重复,你不能只是随机 select 个字符。您需要将它们打乱顺序并选出前 n
个字符:
public String createRandomCode(int codeLength, String id) {
List<Character> temp = id.chars()
.mapToObj(i -> (char)i)
.collect(Collectors.toList());
Collections.shuffle(temp, new SecureRandom());
return temp.stream()
.map(Object::toString)
.limit(codeLength)
.collect(Collectors.joining());
}
编辑 2 只是为了好玩,这是实现原始随机代码生成器的另一种方法(允许重复):
public static String createRandomCode(int codeLength, String id) {
return new SecureRandom()
.ints(codeLength, 0, id.length())
.mapToObj(id::charAt)
.map(Object::toString)
.collect(Collectors.joining());
}
我正在尝试使用 Secure Random 在 java 中的大写字母 A-Z 之间生成一个字符串。目前我能够生成一个带有特殊字符的字母数字字符串,但我想要一个只有大写字母的字符串。
public String createRandomCode(int codeLength, String id){
char[] chars = id.toCharArray();
StringBuilder sb = new StringBuilder();
Random random = new SecureRandom();
for (int i = 0; i < codeLength; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
String output = sb.toString();
System.out.println(output);
return output ;
}
输入参数是输出字符串的长度和 id,它是字母数字 string.Can不明白要对上述代码进行哪些修改以仅生成大写字母字符串。请帮助..
这是我编写并使用的生成器:
public class RandomGenerator {
private static final String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String generateRandom(int length) {
Random random = new SecureRandom();
if (length <= 0) {
throw new IllegalArgumentException("String length must be a positive integer");
}
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append(characters.charAt(random.nextInt(characters.length())));
}
return sb.toString();
}
}
在numChars
字符串中你可以放入任何你想包含的字符。 int length
参数为生成的随机字符串的长度
这是一个示例方法,它使用字符 A 到 Z 的 int 范围(此方法还避免了 String
中的重复字符):
public String createRandomCode(final int codeLength) {
int min = 65;// A
int max = 90;// Z
StringBuilder sb = new StringBuilder();
Random random = new SecureRandom();
for (int i = 0; i < codeLength; i++) {
Character c;
do {
c = (char) (random.nextInt((max - min) + 1) + min);
} while (sb.indexOf(c.toString()) > -1);
sb.append(c);
}
String output = sb.toString();
System.out.println(output);
return output;
}
范围部分来自这个主题:Generating random integers in a specific range
您的方法从 id
参数中随机 selects 个字符。如果您希望这些仅是大写字母,则传递包含这些字符的字符串:
String randomCode = createRandomCode(length, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
EDIT 如果你想避免重复,你不能只是随机 select 个字符。您需要将它们打乱顺序并选出前 n
个字符:
public String createRandomCode(int codeLength, String id) {
List<Character> temp = id.chars()
.mapToObj(i -> (char)i)
.collect(Collectors.toList());
Collections.shuffle(temp, new SecureRandom());
return temp.stream()
.map(Object::toString)
.limit(codeLength)
.collect(Collectors.joining());
}
编辑 2 只是为了好玩,这是实现原始随机代码生成器的另一种方法(允许重复):
public static String createRandomCode(int codeLength, String id) {
return new SecureRandom()
.ints(codeLength, 0, id.length())
.mapToObj(id::charAt)
.map(Object::toString)
.collect(Collectors.joining());
}