web-dev-qa-db-ja.com

Groovy:指定された文字セットからランダムな文字列を生成します

Groovyを使用して、特定の正規表現からランダムな文字シーケンスを生成したいと思います。

  • 許可される文字は次のとおりです:[A-Z0-9]
  • 生成されたシーケンスの長さ:9

例:A586FT3HS

ただし、役立つコードスニペットは見つかりません。正規表現の使用が複雑すぎる場合は、許可された文字セットを手動で定義しても問題ありません。

38
Robert Strauch

Apache commonsを使用したくない場合、またはGrailsを使用していない場合、代替手段は次のとおりです。

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

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

繰り返しますが、あなたはalphabetを自分で作成する必要があります...正規表現を解析し、通過する文字のアルファベットを抽出できるものは知りません...

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

インポートされたクラスRandomStringUtilsは既にGrailsクラスパス上にあるため、Grailsアプリを作成している場合、クラスパスに何も追加する必要はありません。

更新

文字列に英数字のみを含める場合は、上記を次のように置き換えることができます

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

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

ランダムなテキスト文字列を生成する単一行のコマンド/ステートメントは次のとおりです。

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

または

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

アルファベットで文字列を作成し、これを9回実行します。

  1. ランダム 数を作成する
  2. アルファベットで 対応する文字 を見つけます。
  3. 追加 結果に
1
Sjoerd

このコードは、Webで見つけた純粋なGroovyです。

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
        }

戻り文字列は、ローカルで使用するには十分です。

BFx9PU
MkbRaE
FKvupt
gEwjby
Gk2kK6
uJmzLB
WRJGKL
RnSUQT
0