Необходимо ввести в строку 128 произвольных символов!

Стоит задача проверить, что название может содержать не более 128 символов! Подскажите пожалуйста, как сгенерировать 128 рандомных символов и вставить в строку! язык -java


Ответы (3 шт):

Автор решения: Alexander Kozlov

Нужно сделать цикл for от нуля до 127. В цикле в StringBuilder на каждую итерацию вписывать по символу. Символ это обычный char от 0 до 255, емнип. Соответственно в каждой итерации генерируйте случайную цифру/цисло от 0 до 255, преобразуйте в char и дописывайте в StringBuilder.

→ Ссылка
Автор решения: Danila Kartovitskii

Вы можете сделать вот такой генератор рандомного String, обычно я использую такой:

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        System.out.println(generateRandomString(128));
    }

    public static String generateRandomString(int length) {
        Random random = new Random();
        String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            sb.append(chars.charAt(random.nextInt(chars.length())));
        }
        return sb.toString();
    }
}

Пример результата выполнения: XUDpqVP5VwfxdPjhW54rhRfIBTKqewVx6lXcrKuhPz2Y9FRF68ibrwR5h837ONsdq5ZKjLDDDTnVpRp7yHO4TInak4VbbEGKLiZI1OS03tI97SB4Cd0wZtLAqAta23Dk

→ Ссылка
Автор решения: Nowhere Man

Более лаконичный способ для генерации строк из действительно случайных символов, а не только из буквенноцифровых, состоит в использовании метода Random::nextBytes, для получения случайного массива байтов:

public static String getRandomStringBytes(int n) {
    byte[] bytes = new byte[n];
    new Random().nextBytes(bytes);
    return new String(bytes, Charset.forName("ISO-8859-1")); 
}

Таким способом при необходимости можно получить полную абракадабру, включающую непечатаемые символы, а при использовании многобайтных кодировок типа UTF-8 (Charset.forName("UTF-8")) длина строки может оказаться меньше заявленной.


Также для получения случайной строки для известного диапазона символов можно использовать Stream API, в частности метод Random::ints, и получившийся поток кодовых точек легко преобразовать в строку:

public static String getRandomString(int n, char from, char to) {
    return new Random().ints(n, from, to + 1)
        .collect(() -> new StringBuilder(n), StringBuilder::appendCodePoint, StringBuilder::append)
        .toString();
}
public static String getRandomAlphanum(int n, char from, char to) {
    return new Random().ints(from, to + 1)
        .filter(Character::isLetterOrDigit)
        .limit(n)
        .collect(() -> new StringBuilder(n), StringBuilder::appendCodePoint, StringBuilder::append)
        .toString();
}

Сравнение трёх способов:

System.out.println("bytes 128: " + getRandomStringBytes(128));
System.out.println("chars 128: " + getRandomString(128, ' ', 'z'));
System.out.println("alnum 128: " + getRandomAlphanum(128, ' ', 'z'));
bytes 128: M˜²ÊK ¦ËÏÀ|*ÁXsΚ‘dÆ^2…¾š™÷œ0AB6HhÀf'?Ëí!IYRR+¹ä˜-LMoöþ?)GîÑ‘zÀßü9ãõ¯J1…w+eÂd5Ùα“Zå›Eà˜~ÆöR½Þ
Æ­…9Ö`#‹¬»l&Bš>ffi§
chars 128: 4[]9nuTgXbW6d`X54p];XQY*QjsSB:mdY<N0YAS4%]-l's,5jjYV;\<"$\a"?N;^u&h.M3"'=Vv59_WS7C%@We[GSRl)rm90yi!@44Te9BxN2eFQ[r2DP%;32b`oq7n?
alnum 128: h9P2byiYXzjDSQT9Ac3ODwW8Uu1LimKHHIzvvpwUhE59lNLca7HlSmcoIZGxTqBf7q2p4ufoxKbWqD7wiDwPlEQpuajmk8E9C5EaaOBQH7Zwcljr9ZCUqFlOyjyNEEuN

Также следует упомянуть, что в библиотеке Apache Commons Lang есть класс RandomStringUtils, в котором реализовано множество методов для генерации случайных строк нужной длины и формата: randomAlphabetic, randomAlphanumeric, randomAscii, randomNumeric, random

→ Ссылка