Groovy: Generate random string from given character set

后端 未结 6 485
温柔的废话
温柔的废话 2021-01-31 14:33

Using Groovy, I\'d like to generate a random sequence of characters from a given regular expression.

  • Allowed charaters are: [A-Z0-9]
  • Length o
相关标签:
6条回答
  • 2021-01-31 15:10

    Create a string with your alphabet, then do this 9 times:

    1. Create a random number
    2. Find the corresponding character in your alphabet.
    3. Append it to the result
    0 讨论(0)
  • 2021-01-31 15:16
    import org.apache.commons.lang.RandomStringUtils
    
    String charset = (('A'..'Z') + ('0'..'9')).join()
    Integer length = 9
    String randomString = RandomStringUtils.random(length, charset.toCharArray())
    

    The imported class RandomStringUtils is already on the Grails classpath, so you shouldn't need to add anything to the classpath if you're writing a Grails app.

    Update

    If you only want alphanumeric characters to be included in the String you can replace the above with

    String randomString = org.apache.commons.lang.RandomStringUtils.random(9, true, true)
    
    0 讨论(0)
  • 2021-01-31 15:16

    This code is pure Groovy I found on the web:

    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
            }
    

    The return string is good enough for local use:

    BFx9PU
    MkbRaE
    FKvupt
    gEwjby
    Gk2kK6
    uJmzLB
    WRJGKL
    RnSUQT
    
    0 讨论(0)
  • 2021-01-31 15:24

    Here is a single line command/statement to generate random text string

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

    or

    def randText = print new Random().with {(1..9).collect {(('a'..'z')).join()[ nextInt((('a'..'z')).join().length())]}.join()}
    
    0 讨论(0)
  • 2021-01-31 15:26

    For SoupUI users:

    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);
    
    0 讨论(0)
  • 2021-01-31 15:32

    If you don't want to use apache commons, or aren't using Grails, an alternative is:

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

    but again, you'll need to make your alphabet yourself... I don't know of anything which can parse a regular expression and extract out an alphabet of passing characters...

    0 讨论(0)
提交回复
热议问题