web-dev-qa-db-fra.com

Groovy: générer une chaîne aléatoire à partir d'un jeu de caractères donné

En utilisant Groovy, j'aimerais générer une séquence aléatoire de caractères à partir d'une expression régulière donnée.

  • Les caractères autorisés sont: [A-Z0-9]
  • Longueur de la séquence générée: 9

Exemple: A586FT3HS

Cependant, je ne trouve aucun extrait de code susceptible de m'aider. Si l'utilisation d'expressions régulières est trop compliquée, je vais pouvoir définir manuellement le jeu de caractères autorisé.

37
Robert Strauch

Si vous ne souhaitez pas utiliser Apache commons ou n'utilisez pas Grails, vous pouvez également:

def generator = { String alphabet, int n ->
  new Random().with {
    (1..n).collect { alphabet[ nextInt( alphabet.length() ) ] }.join()
  }
}

generator( (('A'..'Z')+('0'..'9')).join(), 9 )

mais encore une fois, vous devrez faire votre alphabet vous-même ... Je ne sais rien qui puisse analyser une expression régulière et extraire un alphabet de caractères de passage ...

59
tim_yates
import org.Apache.commons.lang.RandomStringUtils

String charset = (('A'..'Z') + ('0'..'9')).join()
Integer length = 9
String randomString = RandomStringUtils.random(length, charset.toCharArray())

La classe RandomStringUtils importée figure déjà dans le chemin de classe Grails. Vous ne devez donc rien ajouter à ce chemin si vous écrivez une application Grails.

Mettre à jour

Si vous souhaitez uniquement inclure des caractères alphanumériques dans la chaîne, vous pouvez remplacer ce qui précède par

String randomString = org.Apache.commons.lang.RandomStringUtils.random(9, true, true)
44
Dónal

Pour les utilisateurs de SoupUI:

def generator = { String alphabet, int n ->
  new Random().with {
    (1..n).collect { alphabet[ nextInt( alphabet.length() ) ] }.join()
  }
}
randomValue = generator( (('A'..'Z')+('0'..'9')+('a'..'z')).join(), 15 )
testRunner.getTestCase().setPropertyValue("randomNumber", randomValue);
5
user3215161

Voici une commande/instruction sur une seule ligne pour générer une chaîne de texte aléatoire

print new Random().with {(1..9).collect {(('a'..'z')).join()[ nextInt((('a'..'z')).join().length())]}.join()}

ou

def randText = print new Random().with {(1..9).collect {(('a'..'z')).join()[ nextInt((('a'..'z')).join().length())]}.join()}
1
vkrams

Créez une chaîne avec votre alphabet, alorsdo cette 9 fois:

  1. Créer un aléatoire nombre
  2. Recherchez le caractère correspondant dans votre alphabet.
  3. Ajouter il au résultat
1
Sjoerd

Ce code est pur Groovy j'ai trouvé sur le web:

def key
def giveMeKey(){
    String alphabet = (('A'..'N')+('P'..'Z')+('a'..'k')+('m'..'z')+('2'..'9')).join() 
    def length = 6
     key = new Random().with {
           (1..length).collect { alphabet[ nextInt( alphabet.length() ) ] }.join()
             }
            return key
        }

La chaîne de retour est assez bonne pour une utilisation locale:

BFx9PU
MkbRaE
FKvupt
gEwjby
Gk2kK6
uJmzLB
WRJGKL
RnSUQT
0
Abdelsalam Shahlol