it-swarm.com.de

Groovy: Generiere zufällige Zeichenfolgen aus dem angegebenen Zeichensatz

Mit Groovy möchte ich aus einem bestimmten regulären Ausdruck eine zufällige Folge von Zeichen generieren.

  • Zulässige Zeichen sind: [A-Z0-9]
  • Länge der generierten Sequenz: 9

Beispiel: A586FT3HS

Ich kann jedoch keinen Code-Ausschnitt finden, der mir helfen würde. Wenn die Verwendung regulärer Ausdrücke zu kompliziert ist, kann ich die erlaubte Menge von Zeichen manuell definieren.

37
Robert Strauch

Wenn Sie Apache Commons nicht verwenden möchten oder Grails nicht verwenden, ist eine Alternative:

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

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

sie müssen jedoch selbst Ihre alphabet selbst erstellen ... Ich kenne nichts, was einen regulären Ausdruck analysieren und ein Alphabet von übergebenen Zeichen extrahieren kann ...

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())

Die importierte Klasse RandomStringUtils befindet sich bereits im Grails-Klassenpfad. Wenn Sie eine Grails-App schreiben, müssen Sie dem Klassenpfad nichts hinzufügen.

Aktualisieren

Wenn Sie nur alphanumerische Zeichen in den String aufnehmen möchten, können Sie die obigen Zeichen durch ersetzen

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

Für SoapUI-Benutzer:

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

Hier ist ein einzeiliger Befehl/Anweisung zum Erzeugen einer zufälligen Textzeichenfolge

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

oder

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

Erstellen Sie eine Zeichenfolge mit Ihrem Alphabet und danndo 9 Mal:

  1. Erstellen Sie eine zufällige Nummer
  2. Finden Sie das entsprechende Zeichen in Ihrem Alphabet.
  3. Anhängen es an das Ergebnis
1
Sjoerd

Dieser Code ist pure Groovy, die ich im Web gefunden habe:

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
        }

Die Rückkehrzeichenfolge ist für die lokale Verwendung gut genug:

BFx9PU
MkbRaE
FKvupt
gEwjby
Gk2kK6
uJmzLB
WRJGKL
RnSUQT
0