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

String Groovy:从给定的字符集生成随机字符串,string,groovy,random,String,Groovy,Random,使用Groovy,我想从给定的正则表达式生成一个随机字符序列 允许的字符为:[A-Z0-9] 生成序列的长度:9 示例:A586FT3HS 但是,我找不到任何对我有帮助的代码片段。如果使用正则表达式太复杂,我可以手动定义允许的字符集。用字母表创建一个字符串,然后 这样做9次: 创建一个数字 在你的字母表中找到 结果如何 导入的类RandomStringUtils已经在Grails类路径上,因此如果您正在编写Grails应用程序,则不需要向类路径添加任何内容 更新 如果您只希望字符串中包含字母

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

  • 允许的字符为:
    [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()}