如何在Java中生成随机字符串[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中生成随机字符串[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有一个名为Student
的对象,它有studentName
,studentId
,studentAddress
等。对于studentId
,我必须生成由七个数字字符组成的随机字符串,例如。
studentId = getRandomId();
studentId = "1234567" <-- from the random generator.
我必须确保没有重复的ID。
生成随机字符串很简单 - 只需使用java.util.Random
和包含您想要的所有字符的字符串,例如:
public static String generateString(Random rng, String characters, int length)
{
char[] text = new char[length];
for (int i = 0; i < length; i++)
{
text[i] = characters.charAt(rng.nextInt(characters.length()));
}
return new String(text);
}
现在,为了唯一性,您需要将生成的字符串存储在某处。你如何做到这将取决于你的应用程序的其余部分。
这非常好:
如果您想要唯一性(很有可能),请考虑使用MD5或SHA哈希。
您还可以使用java.util包中的UUID类,该类返回32位字符String的随机uuid。
java.util.UUID.randomUUID().toString()
http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html
Random ran = new Random();
int top = 3;
char data = ' ';
String dat = "";
for (int i=0; i<=top; i++) {
data = (char)(ran.nextInt(25)+97);
dat = data + dat;
}
System.out.println(dat);
我认为以下类代码会对您有所帮助。它支持多线程,但你可以做一些改进,比如删除同步块和同步到getRandomId()方法。
public class RandomNumberGenerator {
private static final Set<String> generatedNumbers = new HashSet<String>();
public RandomNumberGenerator() {
}
public static void main(String[] args) {
final int maxLength = 7;
final int maxTry = 10;
for (int i = 0; i < 10; i++) {
System.out.println(i + ". studentId=" + RandomNumberGenerator.getRandomId(maxLength, maxTry));
}
}
public static String getRandomId(final int maxLength, final int maxTry) {
final Random random = new Random(System.nanoTime());
final int max = (int) Math.pow(10, maxLength);
final int maxMin = (int) Math.pow(10, maxLength-1);
int i = 0;
boolean unique = false;
int randomId = -1;
while (i < maxTry) {
randomId = random.nextInt(max - maxMin - 1) + maxMin;
synchronized (generatedNumbers) {
if (generatedNumbers.contains(randomId) == false) {
unique = true;
break;
}
}
i++;
}
if (unique == false) {
throw new RuntimeException("Cannot generate unique id!");
}
synchronized (generatedNumbers) {
generatedNumbers.add(String.valueOf(randomId));
}
return String.valueOf(randomId);
}
}
您需要问的第一个问题是您是否真的需要随机ID。有时,顺序ID就足够了。
现在,如果您确实需要它是随机的,我们首先注意到生成的不包含重复项的数字序列不能被称为随机数。 :p现在我们已经解决了这个问题,最快的方法是使用包含已经生成的所有ID的Hashtable
或HashMap
。每当生成新ID时,请根据哈希表对其进行检查,如果ID已经出现则重新生成。如果学生人数远远少于ID的范围,这通常会很有效。如果不是,则由于需要重新生成ID的概率增加,您陷入更深的麻烦,P(生成新ID)= number_of_id_already_generated / number_of_all_possible_ids。在这种情况下,请检查第一段(您是否需要ID是随机的?)。
希望这可以帮助。
很多可能......
你知道如何随机生成一个整数吗?你可以从中生成一个char ...(ex 65 - > A)
这取决于你需要什么,随机性的水平,涉及的安全性...但对于一个学校项目,我猜UUID子串将适合:)
以上是关于如何在Java中生成随机字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章