Генерация случайных слов в Java?

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

public static String[] generateRandomWords(int numberOfWords){
String[] randomStrings = new String[numberOfWords];
Random random = Random();
    return null;
}

(способ заглушки)

Мне просто нужны строчные слова длиной 1-10. Я читал что-то о генерации случайных чисел, затем бросании в char или что-то еще, но я не совсем понял. Если кто-то может показать мне, как генерировать случайные слова, то я должен легко использовать цикл for для вставьте слова в массив. Спасибо!

6 ответов


вам нужны настоящие английские слова или просто случайные строки, содержащие только буквы a-z?

Если вам нужны настоящие английские слова, единственный способ сделать это-использовать словарь и выбирать слова из него наугад.

Если вам не нужны английские слова, то что-то вроде этого будет делать:

public static String[] generateRandomWords(int numberOfWords)
{
    String[] randomStrings = new String[numberOfWords];
    Random random = new Random();
    for(int i = 0; i < numberOfWords; i++)
    {
        char[] word = new char[random.nextInt(8)+3]; // words of length 3 through 10. (1 and 2 letter words are boring.)
        for(int j = 0; j < word.length; j++)
        {
            word[j] = (char)('a' + random.nextInt(26));
        }
        randomStrings[i] = new String(word);
    }
    return randomStrings;
}

RandomStringUtils из Коммонс-Ланг


Если вы хотите генерировать случайные слова заданной длины, вам понадобится алгоритм, чтобы определить, является ли данная строка словом (жестким), или доступ к списку слов всех слов на данном языке (легкий). Если это поможет, вот список каждого слова в словаре Scrabble.

если у вас есть список всех слов в языке, вы можете загрузить эти слова в ArrayList или другая линейная структура. Затем вы можете создать случайный индекс в этот список, чтобы получить случайное слово.


Если вы хотите случайные слова без использования словаря...

  1. составьте список всех букв, которые вы хотите, возможно в ваших словах
  2. создать случайный индекс, чтобы выбрать букву из списка
  3. повторите, пока у вас не будет нужной длины слова

повторите эти шаги для количества слов, которые вы хотите создать.


вы можете вызывать этот метод для каждого слова, которое вы хотите создать. Обратите внимание, что вероятность генерации анаграмм должна быть относительно низкой.

String generateRandomWord(int wordLength) {
    Random r = new Random(); // Intialize a Random Number Generator with SysTime as the seed
    StringBuilder sb = new StringBuilder(wordLength);
    for(int i = 0; i < wordLength; i++) { // For each letter in the word
        char tmp = 'a' + r.nextInt('z' - 'a'); // Generate a letter between a and z
        sb.append(tmp); // Add it to the String
    }
    return sb.toString();
}

зачем генерировать случайные слова? Когда вы можете использовать некоторые словари.