Подтвердить что ты не робот

Groovy: генерировать случайную строку из заданного набора символов

Используя Groovy, я хотел бы генерировать случайную последовательность символов из данного регулярного выражения.

  • Разрешенные символы: [A-Z0-9]
  • Длина сгенерированной последовательности: 9

Пример: A586FT3HS

Однако я не могу найти фрагмент кода, который бы мне помог. Если использование регулярных выражений слишком сложно, я буду точно определять допустимый набор символов вручную.

4b9b3361

Ответ 1

Если вы не хотите использовать 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 самостоятельно... Я ничего не знаю, что может анализировать регулярное выражение и извлекать алфавит пропущенных символов...

Ответ 2

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.

Update

Если вы хотите, чтобы в строку были добавлены буквенно-цифровые символы, вы можете заменить вышеприведенные

String randomString = org.apache.commons.lang.RandomStringUtils.random(9, true, true)

Ответ 3

Для пользователей 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);

Ответ 4

Создайте строку с вашим алфавитом, затем сделайте это 9 раз:

Ответ 5

Вот однострочная команда/инструкция для генерации произвольной текстовой строки

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

Ответ 6

Этот код чистый 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