我编写了一个程序,可以对单词进行排序并确定任何字谜词。我想生成一个随机字符串数组,以便我可以测试我的方法的运行时间。
public static String[] generateRandomWords(int numberOfWords){
String[] randomStrings = new String[numberOfWords];
Random random = Random();
return null;
}
(方法存根)
我只想要长度为 1-10 的小写单词。我读过一些有关生成随机数,然后转换为 char 或其他内容的内容,但我并不完全理解。如果有人可以向我展示如何生成随机单词,那么我应该能够轻松地使用 for 循环将单词插入数组中。谢谢!
您需要实际的英语单词,还是只包含字母 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 来自 commons-lang
为什么要生成随机单词?当你可以使用一些词典时。
如果你想生成给定长度的随机单词,你要么需要一个算法来确定给定的字符串是否是一个单词(困难),要么访问给定语言中所有单词的单词列表(简单) 。 如果有帮助,这是拼字游戏词典中每个单词的列表。
一旦获得了某种语言中所有单词的列表,您就可以将这些单词加载到
ArrayList
或其他线性结构中。 然后,您可以在该列表中生成随机索引以获取随机单词。
您可以为每个要生成的单词调用此方法。请注意,生成字谜词的概率应该相对较低。
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();
}
如果你想要随机单词而不使用字典......
针对您想要生成的单词数量重复这些步骤。
public static void main(final String[] args) throws IOException {
final var dict = getDictionary();
final var random = ThreadLocalRandom.current();
final var word = dict.get(random.nextInt(0, dict.size()));
System.out.println(word);
}
private static List<String> getDictionary() throws IOException {
Path filePath = Paths.get("/usr/share/dict/words");
return Files.readAllLines(filePath);
}