Java сгенерировать случайную строку

Содержание
  1. Как в Java сгенерировать случайную строку
  2. Генерация случайной строки неограниченного размера с помощью Java
  3. Генерация случайной строки ограниченного размера с помощью Java
  4. Генерация случайной буквенно-цифровой строки с помощью Java 8
  5. Генерация ограниченной случайной строки с помощью Apache Commons Lang
  6. Генерация алфавитной строки с помощью Apache Commons Lang
  7. Генерация буквенно-цифровой строки с помощью Apache Commons Lang
  8. Заключение
  9. Java – Генерация Случайной Строки
  10. 1. Сгенерируйте Случайную Неограниченную Строку С Помощью Простой Java
  11. Дальнейшее чтение:
  12. Эффективный калькулятор частоты слов на Java
  13. Java – Случайные длинные, Плавающие, целочисленные и двойные
  14. Руководство по пулу строк Java
  15. 2. Сгенерируйте Случайную Ограниченную Строку С Помощью Простой Java
  16. 3. Сгенерируйте Случайную Алфавитную Строку С Помощью Java 8
  17. 4. Сгенерируйте Случайную Буквенно-Цифровую Строку С Помощью Java 8
  18. 5. Сгенерируйте Ограниченную Случайную Строку С Помощью Apache Commons Lang
  19. 6. Создайте Алфавитную Строку С Помощью Apache Commons Lang
  20. 7. Сгенерируйте Буквенно-Цифровую Строку С Помощью Apache Commons Lang
  21. 8. Заключение
  22. Читайте ещё по теме:
  23. How can I generate random strings in java? [duplicate]
  24. How to generate a random String in Java [duplicate]

Как в Java сгенерировать случайную строку

В этом руководстве узнаем, как генерировать случайную строку в Java, сначала используя стандартные библиотеки Java, затем используя вариант Java 8 и, наконец, используя библиотеку Apache Commons Lang.

Генерация случайной строки неограниченного размера с помощью Java

Начнем с простого и сгенерируем случайную строку, ограниченную 7 символами:

@Test public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() < byte[] array = new byte[7]; // длина ограничена 7 new Random().nextBytes(array); String generatedString = new String(array, Charset.forName("UTF-8")); System.out.println(generatedString); >

Имейте в виду, что новая строка не будет буквенно-цифровой.

Генерация случайной строки ограниченного размера с помощью Java

Посмотрим на создание более ограниченной случайной строки.

Читайте также:  Таблицы

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

@Test public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() < int leftLimit = 97; // буква 'a' int rightLimit = 122; // буква 'z' int targetStringLength = 10; Random random = new Random(); StringBuilder buffer = new StringBuilder(targetStringLength); for (int i = 0; i < targetStringLength; i++) < int randomLimitedInt = leftLimit + (int) (random.nextFloat() * (rightLimit - leftLimit + 1)); buffer.append((char) randomLimitedInt); >String generatedString = buffer.toString(); System.out.println(generatedString); >

4. Генерация случайной строки из букв с помощью Java 8

Воспользуемся Random.ints, добавленным в JDK 8, для генерации алфавитной строки:

@Test public void givenUsingJava8_whenGeneratingRandomAlphabeticString_thenCorrect() < int leftLimit = 97; // буква 'a' int rightLimit = 122; // буква 'z' int targetStringLength = 10; Random random = new Random(); String generatedString = random.ints(leftLimit, rightLimit + 1) .limit(targetStringLength) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); System.out.println(generatedString); >

Генерация случайной буквенно-цифровой строки с помощью Java 8

Затем можно расширить набор символов, чтобы получить буквенно-цифровую строку:

@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() < int leftLimit = 48; // цифра '0' int rightLimit = 122; // буква 'z' int targetStringLength = 10; Random random = new Random(); String generatedString = random.ints(leftLimit, rightLimit + 1) .filter(i ->(i = 65) && (i = 97)) .limit(targetStringLength) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); System.out.println(generatedString); >

Мы использовали описанный выше метод фильтрации, чтобы пропустить символы Unicode между 65 и 90, чтобы избежать появления символов вне допустимого диапазона.

Генерация ограниченной случайной строки с помощью Apache Commons Lang

Библиотека Commons Lang от Apache очень помогает при генерации случайных строк. Посмотрим на создание ограниченной строки, используя только буквы:

@Test public void givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect()

Таким образом, вместо всего низкоуровневого кода в примере с Java здесь используется простой однострочный код.

Генерация алфавитной строки с помощью Apache Commons Lang

Вот еще один очень простой пример, на этот раз ограниченная строка только с буквенными символами, но без передачи логических флагов в API:

@Test public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect()

Генерация буквенно-цифровой строки с помощью Apache Commons Lang

Наконец, получим ту же самая случайную ограниченную строку, но на этот раз числовую:

@Test public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect()

Мы создали ограниченные и неограниченные строки либо с помощью Java, либо с Java 8, либо с библиотекой Apache Commons.

Заключение

Благодаря различным способам реализации мы смогли сгенерировать ограниченные и неограниченные строки, используя обычную Java, вариант Java 8 или библиотеку Apache Commons.

В этих примерах использовали java.util.Random, но стоит упомянуть, что она не является криптографически безопасной. Рассмотрите возможность использования java.security.SecureRandom вместо приложений, чувствительных к безопасности.

Реализацию всех этих примеров и фрагментов можно найти в проекте GitHub. Это проект на основе Maven, поэтому его легко импортировать и запускать.

Источник

Java – Генерация Случайной Строки

Генерируйте ограниченные и неограниченные случайные строки, используя простую Java и библиотеку Apache Commons Lang.

В этом уроке мы покажем, как сгенерировать случайную строку в Java – сначала с помощью стандартных библиотек Java, затем с помощью варианта Java 8 и, наконец, с помощью библиотеки Apache Commons Lang .

Эта статья является частью серии “Java – Back to Basic” здесь, на Baeldung.

1. Сгенерируйте Случайную Неограниченную Строку С Помощью Простой Java

Давайте начнем с простого и сгенерируем случайную Строку , ограниченную 7 символами:

@Test public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() < byte[] array = new byte[7]; // length is bounded by 7 new Random().nextBytes(array); String generatedString = new String(array, Charset.forName("UTF-8")); System.out.println(generatedString); >

Имейте в виду, что новая строка не будет чем-то отдаленно буквенно-цифровым.

Дальнейшее чтение:

Эффективный калькулятор частоты слов на Java

Java – Случайные длинные, Плавающие, целочисленные и двойные

Руководство по пулу строк Java

2. Сгенерируйте Случайную Ограниченную Строку С Помощью Простой Java

Далее – давайте рассмотрим создание более ограниченной случайной строки; мы собираемся сгенерировать случайную Строку , используя строчные буквы алфавита и заданную длину:

@Test public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() < int leftLimit = 97; // letter 'a' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); StringBuilder buffer = new StringBuilder(targetStringLength); for (int i = 0; i < targetStringLength; i++) < int randomLimitedInt = leftLimit + (int) (random.nextFloat() * (rightLimit - leftLimit + 1)); buffer.append((char) randomLimitedInt); >String generatedString = buffer.toString(); System.out.println(generatedString); >

3. Сгенерируйте Случайную Алфавитную Строку С Помощью Java 8

Теперь давайте использовать Random.ints – добавлено в JDK 8 – для создания алфавитной строки:

@Test public void givenUsingJava8_whenGeneratingRandomAlphabeticString_thenCorrect() < int leftLimit = 97; // letter 'a' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); String generatedString = random.ints(leftLimit, rightLimit + 1) .limit(targetStringLength) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); System.out.println(generatedString); >

4. Сгенерируйте Случайную Буквенно-Цифровую Строку С Помощью Java 8

А затем мы можем расширить наш набор символов, чтобы получить буквенно-цифровую строку :

@Test public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() < int leftLimit = 48; // numeral '0' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); String generatedString = random.ints(leftLimit, rightLimit + 1) .filter(i ->(i = 65) && (i = 97)) .limit(targetStringLength) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); System.out.println(generatedString); >

Обратите внимание на использование метода filter выше, чтобы исключить символы Юникода между 65 и 90 – чтобы избежать символов вне диапазона.

5. Сгенерируйте Ограниченную Случайную Строку С Помощью Apache Commons Lang

Библиотека Commons Lang от Apache очень помогает при генерации случайных строк. Давайте посмотрим на создание ограниченной строки с использованием только букв :

@Test public void givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect()

Поэтому – вместо всего низкоуровневого кода в примере Java-это делается с помощью простой однострочной строки.

6. Создайте Алфавитную Строку С Помощью Apache Commons Lang

Еще один очень простой пример – на этот раз ограниченная Строка только с буквенными символами, но без передачи логических флагов в API:

@Test public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect()

7. Сгенерируйте Буквенно-Цифровую Строку С Помощью Apache Commons Lang

И, наконец, – та же случайная ограниченная Строка , но на этот раз – числовая:

@Test public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect()

И вот у нас есть это – создание ограниченных и неограниченных строк с помощью простой Java, варианта Java 8 или библиотеки Apache Commons.

8. Заключение

С помощью различных методов реализации мы смогли генерировать связанные и несвязанные строки, используя обычную Java, вариант Java 8 или библиотеку Apache Commons.

В этих примерах Java мы использовали java.util.Random , но один момент, о котором стоит упомянуть, заключается в том, что он не является криптографически безопасным. Рассмотрите возможность использования java.security.SecureRandom вместо этого для приложений, чувствительных к безопасности.

Реализацию всех этих примеров и фрагментов можно найти в проекте GitHub . Это проект на основе Maven, поэтому его должно быть легко импортировать и запускать.

Читайте ещё по теме:

Источник

How can I generate random strings in java? [duplicate]

Here are the examples to generate two types of strings.

import java.security.SecureRandom; import java.math.BigInteger; public final class SessionIdentifierGenerator < private SecureRandom random = new SecureRandom(); public String nextSessionId() < return new BigInteger(130, random).toString(32); >> 

OUTPUT: ponhbh78cqjahls5flbdf4dlu4

String uuid = UUID.randomUUID().toString(); System.out.println("uuid http://download.oracle.com/javase/1,5.0/docs/api/java/util/UUID.html" rel="nofollow">here

)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
answered Nov 14, 2011 at 5:46
1
    1
    here is my answer . your posts was very useful . thanks a lot public class RandomeString < public char randomNumber() < int randomNum = 97 + (new Random()).nextInt(122-97); char randomChar = (char)randomNum; return randomChar; >public String RandomS(int n) < StringBuilder sb = new StringBuilder(); for(int i=0 ; iString s = sb.toString(); return s; >
    – Rojin
    Nov 15, 2011 at 6:31
Add a comment|
2

Well, you first write a function that will give you a random character meeting your requirements, then wrap that up in a for loop based on the desired length.

The following program gives one way of doing this, using a constant pool of characters and a random number generator:

import java.util.Random; public class testprog < private static final char[] pool = < 'a','b','c','d','e','f','g', 'h','i','j','k','l','m','n', 'o','p','q','r','s','t','u', 'v','w','x','y','z'>; private Random rnd; public testprog () < rnd = new Random(); >public char getChar() < return pool[rnd.nextInt(pool.length)]; >public String getStr(int sz) < StringBuilder sb = new StringBuilder(); for (int i = 0; i < sz; i++) sb.append(getChar()); return new String(sb); >public static void main(String[] args) < testprog tp = new testprog (); for (int i = 0; i < 10; i++) System.out.println (tp.getStr(i+5)); >>

On one particular run, that gives me:

hgtbf xismun cfdnazi cmpczbal vhhxwjzbx gfjxgihqhh yjgiwnftcnv ognwcvjucdnm hxiyqjyfkqenq jwmncfsrynuwed 

Now, you can adjust the pool of characters if you want it from a different character set, you can even adjust the skewing towards specific characters by changing how often they occur in the array (more e characters than z , for example).

But that should be a good start for what you're trying to do.

Источник

How to generate a random String in Java [duplicate]

I have an object called Student , and it has studentName , studentId , studentAddress , etc. For the studentId , I have to generate random string consist of seven numeric charaters, eg.

studentId = getRandomId(); studentId = "1234567"  

If I read your question correctly, you want to generate a random number R such that 1,000,000

These 3 single line codes are very much useful i guess.. Long.toHexString(Double.doubleToLongBits(Math.random())); UUID.randomUUID().toString(); RandomStringUtils.randomAlphanumeric(16);

how can you ensure uniqueness given limited dimension of data? If number of students exceeds 10^7, you'll have no way to assign a unique number to each.

7 Answers 7

Generating a random string of characters is easy - just use java.util.Random and a string containing all the characters you want to be available, e.g.

public static String generateString(Random rng, String characters, int length) < char[] text = new char[length]; for (int i = 0; i < length; i++) < text[i] = characters.charAt(rng.nextInt(characters.length())); >return new String(text); > 

Now, for uniqueness you'll need to store the generated strings somewhere. How you do that will really depend on the rest of your application.

@chandra: Yes, exactly. Give it a string of the characters you want to select from. So if you only wanted digits you'd pass in "0123456789". If you wanted only capital letters you'd pass in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" etc.

@Is7aq: Well it provides considerably more control over the output, both in terms of which characters are used and how long the string is.

@RockOnGom: Sorry, I'd missed this comment before. For things like this, I view the Random as effectively a dependency - accepting it here allows the caller to decide whether to use a preseeded Random to get repeatable results (e.g. for tests), a SecureRandom to make it suitable for security purposes, etc.

There are 10^7 equiprobable (if java.util.Random is not broken) distinct values so uniqueness may be a concern.

You can also use UUID class from java.util package, which returns random uuid of 32bit characters String.

Random UUIDs are basically guaranteed to be unique though. If you need numeric string from that then hash it.

Random ran = new Random(); int top = 3; char data = ' '; String dat = ""; for (int i=0; i System.out.println(dat); 

I think the following class code will help you. It supports multithreading but you can do some improvement like remove sync block and and sync to getRandomId() method.

public class RandomNumberGenerator < private static final SetgeneratedNumbers = new HashSet(); public RandomNumberGenerator() < >public static void main(String[] args) < final int maxLength = 7; final int maxTry = 10; for (int i = 0; i < 10; i++) < System.out.println(i + ". studentId=" + RandomNumberGenerator.getRandomId(maxLength, maxTry)); >> public static String getRandomId(final int maxLength, final int maxTry) < final Random random = new Random(System.nanoTime()); final int max = (int) Math.pow(10, maxLength); final int maxMin = (int) Math.pow(10, maxLength-1); int i = 0; boolean unique = false; int randomId = -1; while (i < maxTry) < randomId = random.nextInt(max - maxMin - 1) + maxMin; synchronized (generatedNumbers) < if (generatedNumbers.contains(randomId) == false) < unique = true; break; >> i++; > if (unique == false) < throw new RuntimeException("Cannot generate unique id!"); >synchronized (generatedNumbers) < generatedNumbers.add(String.valueOf(randomId)); >return String.valueOf(randomId); > > 

The first question you need to ask is whether you really need the ID to be random. Sometime, sequential IDs are good enough.

Now, if you do need it to be random, we first note a generated sequence of numbers that contain no duplicates can not be called random. :p Now that we get that out of the way, the fastest way to do this is to have a Hashtable or HashMap containing all the IDs already generated. Whenever a new ID is generated, check it against the hashtable, re-generate if the ID already occurs. This will generally work well if the number of students is much less than the range of the IDs. If not, you're in deeper trouble as the probability of needing to regenerate an ID increases, P(generate new ID) = number_of_id_already_generated / number_of_all_possible_ids. In this case, check back the first paragraph (do you need the ID to be random?).

Источник

Оцените статью