Генерация случайных слов в Java? - PullRequest
9 голосов
/ 10 февраля 2011

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

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

(заглушка метода)

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

Ответы [ 6 ]

18 голосов
/ 10 февраля 2011

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

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

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

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;
}
9 голосов
/ 10 февраля 2011

RandomStringUtils от commons-lang

3 голосов
/ 10 февраля 2011

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

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

1 голос
/ 10 февраля 2011

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

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();
}
1 голос
/ 10 февраля 2011

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

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

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

1 голос
/ 10 февраля 2011

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

...