String Groovy:从给定的字符集生成随机字符串
使用Groovy,我想从给定的正则表达式生成一个随机字符序列String Groovy:从给定的字符集生成随机字符串,string,groovy,random,String,Groovy,Random,使用Groovy,我想从给定的正则表达式生成一个随机字符序列 允许的字符为:[A-Z0-9] 生成序列的长度:9 示例:A586FT3HS 但是,我找不到任何对我有帮助的代码片段。如果使用正则表达式太复杂,我可以手动定义允许的字符集。用字母表创建一个字符串,然后 这样做9次: 创建一个数字 在你的字母表中找到 结果如何 导入的类RandomStringUtils已经在Grails类路径上,因此如果您正在编写Grails应用程序,则不需要向类路径添加任何内容 更新 如果您只希望字符串中包含字母
- 允许的字符为:
[A-Z0-9]
- 生成序列的长度:9
A586FT3HS
但是,我找不到任何对我有帮助的代码片段。如果使用正则表达式太复杂,我可以手动定义允许的字符集。用字母表创建一个字符串,然后 这样做9次:
RandomStringUtils
已经在Grails类路径上,因此如果您正在编写Grails应用程序,则不需要向类路径添加任何内容
更新
如果您只希望字符串中包含字母数字字符,则可以将上面的字符替换为
String randomString = org.apache.commons.lang.RandomStringUtils.random(9, true, true)
如果您不想使用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 )
但同样,您需要自己制作字母表
。。。我不知道有什么可以解析正则表达式并提取传递字符的字母表…对于搜狐用户:
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);
这段代码是我在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
下面是一个生成随机文本字符串的单行命令/语句
print new Random().with {(1..9).collect {(('a'..'z')).join()[ nextInt((('a'..'z')).join().length())]}.join()}
或
您还可以使用
@Grab(group='commons-lang',module='commons-lang',version='2.4')
,然后在标准groovy脚本中导入org.apache.commons.lang.RandomStringUtils
您可以得到“org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用staticMethod org.apache.commons.lang.RandomStringUtils random int boolean“。只需遵循以下说明:对于特殊字符,如,,,-哪种将是转义解决方案?因此,您的示例字母表省略了一些字符,因为它们在某些字体中可能看起来相似?小写字母“L”和数字1。还有大写字母“O”和数字零?我明白你的推理吗?(我意识到这只是一个例子。)我不明白I=0的目的是什么;i@Wyck生成的字符串包含随机数目的大写字母、小写字母和数字。我已经更新了答案,正如您所看到的,输出有一组不同的大写、小写字母和数字。循环语句与答案不符。我在Jenkins管道中遇到了两个问题。首先:我必须将.join()
更改为.join(“”)
。要避免hudson.remoting.ProxyException:groovy.lang.MissingMethodException:没有方法签名:java.util.ArrayList.join()适用于参数类型:()值:[]
。我不得不用
闭包重写,只需执行def rand=new Random()
,然后使用rand.nextInt
来避免java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法“nextInt”
当我使用它时,我得到“没有这样的DSL方法‘nextInt’”。你在Jenkins中使用它吗?不知道这在詹金斯行不行。我最终使用了Apacheimport@ChrisF您可能需要使用全名或import:java.util.Random.nextInt(),稍后我将对此进行测试。
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()}