Groovy:从给定的字符集生成随机字符串

Rob*_*uch 40 string random groovy

使用Groovy,我想从给定的正则表达式生成一个随机的字符序列.

  • 允许的字符是: [A-Z0-9]
  • 生成序列的长度:9

例: A586FT3HS

但是,我找不到任何可以帮助我的代码片段.如果使用正则表达式太复杂,我可以手动定义允许的字符集.

tim*_*tes 65

如果您不想使用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 )
Run Code Online (Sandbox Code Playgroud)

但是,再一次,你需要alphabet自己制作......我不知道任何可以解析正则表达式并提取出通过字符的字母表的东西......


Dón*_*nal 47

import org.apache.commons.lang.RandomStringUtils

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

导入的类RandomStringUtils已经在Grails类路径中,因此如果您正在编写Grails应用程序,则不需要向类路径添加任何内容.

更新

如果您只想在字符串中包含字母数字字符,则可以将上面的字符替换为

String randomString = org.apache.commons.lang.RandomStringUtils.random(9, true, true)
Run Code Online (Sandbox Code Playgroud)


vkr*_*ams 6

这是生成随机文本字符串的单行命令/语句

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

或者

def randText = print new Random().with {(1..9).collect {(('a'..'z')).join()[ nextInt((('a'..'z')).join().length())]}.join()}
Run Code Online (Sandbox Code Playgroud)


小智 5

对于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);
Run Code Online (Sandbox Code Playgroud)