76 votes

Comment générer une Chaîne de caractères en Java

J'ai un objet appelé Student, et il a studentName, studentId, studentAddress, etc. Pour l' studentId, je dois générer chaîne aléatoire composé de sept numérique charaters, par exemple.

studentId = getRandomId();
studentId = "1234567" <-- from the random generator.

Et je dois veiller à ce qu'il n'y a pas de code en double.

132voto

Jon Skeet Points 692016

La génération d'une chaîne de caractères aléatoire est facile - il suffit d'utiliser java.util.Random et une chaîne de caractères contenant tous les caractères que vous voulez être disponibles, par exemple

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);
}

Maintenant, pour l'unicité vous aurez besoin de stocker les chaines générées quelque part. Comment fais tu pour que dépendra le reste de votre application.

56voto

David Soroko Points 1496

C'est très joli:

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RandomStringUtils.html

Si vous voulez de l'unicité (avec une forte probabilité) de considérer l'utilisation de MD5 ou SHA hachages.

18voto

Paarth Points 849

Vous pouvez également utiliser l'UUID de la classe de java.util paquet, qui renvoie aléatoire uuid de 32 bits de caractères Chaîne de caractères.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html

5voto

karthik.j Points 1
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);

1voto

Chris Henry Points 344

La première question que vous devez vous poser est de savoir si vous avez vraiment besoin de l'ID au hasard. Parfois, séquentielle Id sont assez bonnes.

Maintenant, si vous avez besoin d'être aléatoire, nous avons d'abord noter un générateur de séquence de nombres qui contiennent aucun duplicata ne peut pas être appelée de façon aléatoire. :p Maintenant que nous obtenons de la sorte, le moyen le plus rapide de le faire est d'avoir un Hashtable ou HashMap contenant tous les Id déjà généré. Chaque fois qu'un nouveau code est généré, vérifier à l'encontre de la table de hachage, les re-générer si l'ID existe déjà. Ce sera généralement bien fonctionner si le nombre d'étudiants est beaucoup moins que la gamme de l'IDs. Si non, vous êtes dans un problème plus profond que la probabilité d'avoir besoin de se régénérer un ID augmente, P(générer de nouvelles ID) = number_of_id_already_generated / number_of_all_possible_ids. Dans ce cas, vérifier le premier paragraphe (avez-vous besoin de l'ID au hasard?).

Espérons que cette aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X