在java中生成随机字符串[重复]
Posted
技术标签:
【中文标题】在java中生成随机字符串[重复]【英文标题】:Generate Random String in java [duplicate] 【发布时间】:2017-01-06 10:00:32 【问题描述】:我正在尝试使用 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,它是字母数字字符串。无法理解对上述代码进行哪些修改以仅生成大写字母字符串。请帮忙。。
【问题讨论】:
【参考方案1】:您的方法从id
参数中随机选择字符。如果您希望这些仅是大写字母,则传递带有这些字符的字符串:
String randomCode = createRandomCode(length, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
编辑如果你想避免重复,你不能只是随机选择字符。您需要随机播放它们并挑选出第一个 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());
【讨论】:
我需要在上面的代码中进行哪些更改以使字符串不包含重复的字母??【参考方案2】:这是我编写和使用的生成器:
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
参数是生成的随机字符串的长度。
【讨论】:
【参考方案3】:这是一个示例方法,它使用字符 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
【讨论】:
以上是关于在java中生成随机字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章