我遇到了一些困难,想弄清楚如何在[1;200)范围长度。我的代码附在下面:
public static String generateRandString() {
String STRING_TOKENS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
StringBuilder stringBuilder = new StringBuilder();
Random random = new Random();
while(stringBuilder.length() <= 200) {
int index = (int) random.nextFloat() * STRING_TOKENS.length();
stringBuilder.append(STRING_TOKENS.charAt(index));
}
return stringBuilder.toString();
}
问题是:
请求20个生成的字符串时,每次返回“aaaaaaaa”字符串可能有200个符号的长度
预期产量:
A7898as7sd6as5da
as87asd67
768asjhg435GhA900324
2g2j3h4gjhgAKL*78a9dd879234
3B234
1
一些限制:
没有其他库(google guava或apache common)
仅限jdk 1.6
非常感谢你的贡献!
5条答案
按热度按时间i5desfxk1#
其他人则谈到了随机生成字符串。为了保证唯一性,可以使用字符串的哈希代码。如果两个字符串具有不同的哈希码,则保证它们不相同。在生成每个字符串时,将其哈希代码放入set/array/whatever中。如果散列码已经存在(不太可能,但可能),那么拒绝该特定字符串并生成替代字符串。
我不确定Java1.6中提供了什么,所以我不会编写任何实际的代码,但是这个想法并不难实现。
dced5bon2#
在你的队伍里
(int) random.nextFloat() * STRING_TOKENS.length()
你的智力施法将只适用于random.nextFloat()
因为这个值在0.0和1.0之间,所以这个转换的结果几乎都是0,你的整个值也都是0(因为0*x是0)。使用括号:
(int) (random.nextFloat() * STRING_TOKENS.length())
将强制转换应用于整个表达式。4ngedf3f3#
使用
int index = random.nextInt(STRING_TOKENS.length());
在java 1.7或更高版本中,生成随机int值(但在特定范围内)的标准方法如下:参见javadoc
java 1.7之前
vsikbqxv4#
试试这个!!!
如果要生成唯一字符串。您可以使用java.util.uuid
r1wp621o5#
这条线:
来,你来投
random.nextFloat()
至int
在乘法之前,因此总是以0 * something
. 添加一些括号:或者更好,使用
nextInt
取而代之的是:如果还想随机化字符串的长度,请滚动另一个数字,以便在
while
回路: