J'ai besoin de générer 10 000 identifiants uniques en Java. Les identifiants doivent être un mélange de chiffres et de lettres et moins de 10 caractères chacun. Des idées? Les bibliothèques intégrées seraient un plus plus.
// class variable
final String Lexicon = "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345674890";
final Java.util.Random Rand = new Java.util.Random();
// consider using a Map<String,Boolean> to say whether the identifier is being used or not
final Set<String> identifiers = new HashSet<String>();
public String randomIdentifier() {
StringBuilder builder = new StringBuilder();
while(builder.toString().length() == 0) {
int length = Rand.nextInt(5)+5;
for(int i = 0; i < length; i++) {
builder.append(Lexicon.charAt(Rand.nextInt(Lexicon.length())));
}
if(identifiers.contains(builder.toString())) {
builder = new StringBuilder();
}
}
return builder.toString();
}
Je réponds aussi tard, mais c'est ce qui est vraiment utile pour le nouveau lecteur. C'est un moyen très simple et efficace d'obtenir noms valides aléatoires. Pour ce faire, ajoutez un référentiel Maven à Pom.xml
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>0.12</version>
</dependency>
Puis utilisez la classe Faker comme ci-dessous dans votre Java code
Faker faker = new Faker();
String name = faker.name().fullName();
String firstName = faker.name().firstName();
String lastName = faker.name().lastName();
String streetAddress = faker.address().streetAddress();
Essayez d'imprimer le résultat à l'aide de Standard System.out.println();
Pour plus de référence Faker Lib
Pourquoi ne pas utiliser java.util.uuid? Il est garanti de générer des identifiants uniques et il est aussi standard que possible :-).
Si vous permettez à Apache Commons Lang ...
public String[] getRandomlyNames(final int characterLength, final int generateSize) {
HashSet<String> list = new HashSet<String>();
for (int i = 0; i < generateSize; ++i) {
String name = null;
do {
name = org.Apache.commons.lang.RandomStringUtils.randomAlphanumeric(
org.Apache.commons.lang.math.RandomUtils.nextInt(characterLength - 1) + 1);
while(list.contains(name));
list.add(name);
}
return list.toArray(new String[]{});
}
Vous pouvez essayer de prendre le hachage de MD5 de l'heure actuelle et vous obtiendrez un identifiant "aléatoire" comme mélange de chiffres et de lettres
Le moyen le plus facile et le plus rapide est de générer permutations d'une certaine chaîne. Tant que la chaîne est suffisamment longue, vous pouvez facilement avoir 10 000 permutations uniques. La bonne chose de générer la permutation est que vous n'avez pas à vous soucier des doubles emplois. Si une chaîne contient tous les caractères différents, il peut générer n! permutations (n est la longueur de la chaîne). Donc, une chaîne de 8 caractères différents peut générer 40 320 permutations différentes.
Il existe de nombreux codes en ligne pour générer des permutations d'une chaîne, telles que celle-ci http://introcs.cs.princeton.edu/23recursion/permutations.java.html .
Si vous voulez qu'ils soient plus aléatoires, vous pouvez utiliser différentes chaînes comme la graine, telles que "ABCDE123", "EFGH456", etc.
Tu pourrais essayer
Random Rand = new Random();
Set<String> words = new HashSet<String>();
while(words.size() < 10000)
words.add(Long.toString(Math.abs(Rand.nextLong() % 3656158440062976L), 36)));
La longue constante est juste assez pour 10 chiffres, base 36.