IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Comment générer une chaine aléatoire ?


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Comment générer une chaine aléatoire ?
    Salut,

    Je voudrais obtenir une chaine aléatoire comme "DF56D" ou "6ke23" (combiné entre les chiffres et les lettres , sans casse particulière).

    Merci par avance de votre aide.

  2. #2
    Membre confirmé
    Avatar de Jacques Beauregard
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2015
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 231
    Points : 595
    Points
    595
    Par défaut
    Salut,

    Bon une solution un peu moche mais pourquoi pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // tu précises ici tous les caractères que tu souhaites avoir au hasard
    char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    // Exemple d'une chaine aléatoire de 20 caractères
    for (int i = 0; i < 20; i++) {
        char c = chars[random.nextInt(chars.length)];
        sb.append(c);
    }
    String output = sb.toString();
    Il ne faut jamais prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont...

    Le guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout d'abord, pour générer n'importe quoi d'aléatoire, on peut utiliser la classe Random (ou ThreadLocalRandom.current() qui une instance déjà créée pour chaque thread). On va à l'aide de cette classe tirer des caractères aléatoirement.

    Pour construire la chaîne, de préférence utiliser un StringBuilder qui va permettre de concaténer chaque caractère l'un après l'autre.

    On aura donc un canevas de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Random random = ThreadLocalRandom.current();
    int tailleChaine = random.nextInt(1, TAILLE_MAX_DE_CHAINE); // on tire la taille de la chaîne entre 1 et une constante qui définira la taille maximum de la chaîne (que tu dois déclarer bien sûr). Tu peux aussi mettre une valeur en dur, par exemple int tailleChaine = 5;
     
    StringBuilder stringBuilder = new StringBuilder(tailleChaine); // on crée une instance de StringBuilder avec un buffer de la taille de la chaîne (qu'on connait)
    for(int i=0; i<tailleChaine; i++) {
     
        char c = /** ici un code pour générer un caractère aléatoire (type char) **/ 
        stringBuilder.append( c ); // on concatène le caractère
     
    }
     
    String chaineAleatoire = stringBuilder.toString();
    Les caractères en Java sont représentés par des valeurs de type char : en Java, ce type peut être mappé sur le type int (à chaque caractère correspond un int, pour les lettres et les chiffres, il s'agit du code ASCII). Il suffit de caster pour obtenir un char.
    On peut donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c = (char)random.nextInt();
    Il faut bien sûr que nextInt() tire un nombre qui fait partie de l'intervalle que tu désires, celui donc qui comprend les lettres minuscules, les lettres majuscules, les chiffres. Ce serait très simple si les codes ASCII de ces caractères étaient contigus, puisqu'il suffirait d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c = (char)random.nextInt(premierCode, dernierCode+1); // la méthode tire un int entre le premier nombre inclus et le dernier exclu
    Mais ils ne le sont pas, malheureusement. Le moyen le plus simple de s'en sortir à mon avis est de construire un tableau avec tous les caractères voulus et de faire un tirage dans ce tableau.
    Ainsi si on a un tableau comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char[] tableau = /** définition du tableau **/
    On peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c = tableau[random.nextInt(tableau.length)]; // on n'a pas besoin de mettre le premier paramètre lorsqu'il vaut 0
    On pourrait remplir le tableau à la main, mais ce serait fastidieux : on va le remplir automatiquement, avec trois boucles for (on peut incrémenter un char, comme on incrémente un int, à cause du mapping dont j'ai déjà parlé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char[] tableau = new char[26 + 26 + 10]; // on prévoit la place pour 26 lettres x 2 + 10 chiffres
    int i=0;
    for(char c='a'; c<='z'; c++, i++) { // on remplit avec les minuscules
       tableau[i] = c;
    }
    for(char c='A'; c<='Z'; c++, i++) { // on remplit avec les majuscules
       tableau[i] = c;
    }
    for(char c='0'; c<='9'; c++, i++) { // on remplit avec les chiffres
       tableau[i] = c;
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Creation d'une chaine de caractere aleatoire.
    Par Shakta dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/01/2008, 16h25
  2. recuperer une chaine de caractere aleatoire
    Par ajupa dans le forum Général Python
    Réponses: 2
    Dernier message: 20/12/2007, 19h24
  3. Réponses: 2
    Dernier message: 10/07/2002, 11h51
  4. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo