Как сгенерировать случайную алфавитно-цифровую строку
Проблема: Я ищу простой алгоритм на 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"?
Генерация случайной строки/символов в JavaScript
Как преобразовать строку в int в Java?
Как разделить строку в Java?
Преобразование 'ArrayList<String>' в 'String[]' в Java