Вот одно решение (из многих возможностей). Обратите внимание, что это может быть сведено к нескольким утверждениям, но тогда это будет трудно объяснить комментариями. Во-первых, давайте сделаем самый простой.
Random r = new Random(23);
Set<String> stringSet = new HashSet<>();
for (int i = 0; i < 5; i++) {
stringSet.add(Integer.toString(r.nextInt()));
}
stringSet.forEach(System.out::println);
Да! Числа были преобразованы в строки. Вы не указали тип строк.
Двигаемся дальше ...
Random r = new Random(23);
Set<String> stringSet = new HashSet<>();
for (int i = 0; i < 5; i++) {
// use a Stringbuilder to build it.
StringBuilder sb = new StringBuilder();
// length of string between 6 and 10 inclusive
int len = r.nextInt(5)+6;
// now build the string
while (len-- > 0) {
// generate a character from 'a' to 'z' inclusive
char c = (char)(r.nextInt(26) + 'a');
sb.append(c);
}
// and it to the set
stringSet.add(sb.toString());
}
// print them.
for (String s : stringSet) {
System.out.println(s);
}
Этот прогон напечатан
sefmjkzket
qfjklm
dxocur
mldkzcmv
ivqrynsspu
Ваш вывод может быть другим (они random).
Обратите внимание, что при построении строки используются целые числа от 0 до 25 включительно. Поскольку строчные буквы являются последовательными, вы получаете a
до z
, просто добавляя a
к каждому числу. Можно также просто случайным образом индексировать в строку букв, например, так:
String alphabet = "abcdefghijlmnopqrstuvwxyz";
index = r.random(26); //0 to 25
char c =alphabet.charAt(index);
Как было сказано, есть много способов сделать это.
Вот заключительная демонстрация с использованием Streams. Струны имеют различную природу.
String alphabet = "abcdefghijlmnopqrstuvwxyz";
Set<String> strings = Stream.generate(() -> 1)
.map(z -> alphabet.substring(r.nextInt(5),
r.nextInt(10) + 10))
.distinct().limit(5).collect(Collectors.toSet());
strings.forEach(System.out::println);
Распечатать их
cdefghijl
abcdefghij
defghijlmnopqrs
cdefghij
cdefghijlmnopqrs