Groovy: генерировать случайную строку из заданного набора символов
Используя Groovy, я хотел бы генерировать случайную последовательность символов из данного регулярного выражения.
- Разрешенные символы:
[A-Z0-9]
- Длина сгенерированной последовательности: 9
Пример: A586FT3HS
Однако я не могу найти фрагмент кода, который бы мне помог. Если использование регулярных выражений слишком сложно, я буду точно определять допустимый набор символов вручную.
Ответы
Ответ 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