Как сгенерировать случайную алфавитно-цифровую строку
Проблема: Я ищу простой алгоритм на Java для генерации псевдослучайной алфавитно-цифровой строки. В моем случае это будет использоваться в качестве уникального идентификатора сессии/ключа, который «вероятно» будет уникальным при создании более 500К+ строк (мои потребности не требуют ничего более сложного).
Идеально было бы иметь возможность задавать длину строки в зависимости от моих потребностей в уникальности. Например, сгенерированная строка длиной 12 символов может выглядеть как "AEYGF7K0DM1X".
5 ответ(ов)
Java предоставляет способ сделать это напрямую. Если вы не хотите, чтобы в строке были дефисы, их легко удалить. Просто используйте uuid.replace("-", "").
Вот пример кода, генерирующего строку UUID:
import java.util.UUID;
public class RandomStringGenerator {
public static void main(String[] args) {
System.out.println(generateString());
}
public static String generateString() {
String uuid = UUID.randomUUID().toString();
return "uuid = " + uuid;
}
}
Вывод
uuid = 2d7428a6-b58c-4008-8575-f05549f16316
Если вы хотите вернуть UUID без дефисов, измените метод generateString следующим образом:
public static String generateString() {
String uuid = UUID.randomUUID().toString().replace("-", "");
return "uuid = " + uuid;
}
Теперь вывод будет выглядеть так:
uuid = 2d7428a6b58c40088575f05549f16316
Вот перевод вашего кода на русский язык, оформленный в стиле ответа на StackOverflow:
Вы можете создать случайную строку заданной длины, используя следующий код на Java:
static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
static SecureRandom rnd = new SecureRandom();
String randomString(int len) {
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
sb.append(AB.charAt(rnd.nextInt(AB.length())));
}
return sb.toString();
}
Объяснение кода:
- AB - это строка, содержащая допустимые символы для генерации случайной строки. Включает цифры, заглавные и строчные буквы.
- SecureRandom rnd - объект
SecureRandomиспользуется для крепкой генерации случайных чисел. - randomString(int len) - метод, который принимает целое число
len, указывающее длину генерируемой строки. - Внутри метода создается
StringBuilder, к которому поочередно добавляются случайные символы из строкиAB, выбранные с помощьюrnd.nextInt(AB.length()), который генерирует случайный индекс.
Этот код можно использовать, например, для создания случайных паролей или идентификаторов. Убедитесь, что длина, передаваемая методу randomString, положительна, чтобы избежать ошибок.
Если у вас возникнут дополнительные вопросы по этому коду или его использованию, не стесняйтесь задавать!
Вот короткое и простое решение, но оно использует только строчные буквы и цифры:
Random r = new java.util.Random();
String s = Long.toString(r.nextLong() & Long.MAX_VALUE, 36);
Размер строки составляет примерно 12 цифр в системе счисления с основанием 36, и улучшить его дальнейшим образом не представляется возможным. Конечно, вы можете объединить несколько экземпляров, если вам нужно больше символов.
Вот пример кода на Java для генерации случайной алфавитно-цифровой строки заданной длины:
import static java.lang.Math.round;
import static java.lang.Math.random;
import static java.lang.Math.pow;
import static java.lang.Math.abs;
import static java.lang.Math.min;
import static org.apache.commons.lang.StringUtils.leftPad;
public class RandomAlphaNum {
public static String gen(int length) {
StringBuffer sb = new StringBuffer();
for (int i = length; i > 0; i -= 12) {
int n = min(12, abs(i));
sb.append(leftPad(Long.toString(round(random() * pow(36, n)), 36), n, '0'));
}
return sb.toString();
}
}
Вот пример использования этого метода:
scala> RandomAlphaNum.gen(42)
res3: java.lang.String = uja6snx21bswf9t89s00bxssu8g6qlu16ffzqaxxoy
Код создает строку, состоящую из случайных букв и цифр, длиной 42 символа. Он использует класс Math для генерации случайных чисел и StringBuffer для построения итоговой строки. Метод leftPad из библиотеки Apache Commons Lang используется для дополнения строки нулями до нужной длины.
Альтернативное решение на Java 8 может выглядеть следующим образом:
static final Random random = new Random(); // Или SecureRandom
static final int startChar = (int) '!';
static final int endChar = (int) '~';
static String randomString(final int maxLength) {
final int length = random.nextInt(maxLength + 1);
return random.ints(length, startChar, endChar + 1)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
Этот код генерирует случайную строку, состоящую из символов в диапазоне от ! до ~. В качестве параметра maxLength можно задать максимальную длину генерируемой строки. Сначала определяется длина строки с помощью метода nextInt, а затем создаются случайные коды символов, которые собираются в StringBuilder и преобразуются в строку.
Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь спрашивать!
Почему этот код с использованием случайных строк выводит "hello world"?
Преобразование 'ArrayList<String>' в 'String[]' в Java
Генератор случайных строк на PHP
Как преобразовать строку Java в byte[]?
Проверьте, что строка не равна null и не пуста