如何从txt生成Java字谜
我有Java的主类。并且需要写类的字谜。 主要问题是: 但我不知道现在该怎么办。 我必须写方法:如何从txt生成Java字谜,java,Java,我有Java的主类。并且需要写类的字谜。 主要问题是: 但我不知道现在该怎么办。 我必须写方法: getSortedByAnQty()--返回字谜列表 String getAnagramsFor(String word)——返回wordsToFind.txt中单词的字谜列表 我该怎么做呢?根据下面的代码,您可以得到一个单词的所有字符排列。如果您充实了isValidWord(),您可以将该设置减少到字典中的单词(allWords.txt?)。该方法根据可用字符建立排列,因此无需检查排列是否为字
- getSortedByAnQty()--返回字谜列表
- String getAnagramsFor(String word)——返回wordsToFind.txt中单词的字谜列表
我该怎么做呢?根据下面的代码,您可以得到一个单词的所有字符排列。如果您充实了isValidWord(),您可以将该设置减少到字典中的单词(allWords.txt?)。该方法根据可用字符建立排列,因此无需检查排列是否为字谜
public boolean isValidWord(String word) {
return true; // return you dictionary check here
}
public Set<String> getAnagramsFor(String word, String letters) {
Set<String> set = new HashSet<>(); // no duplicates because of a letter occuring more than once
if (letters.isEmpty()) {
if (isValidWord(word)) {
set.add(word);
}
} else {
for (int i = 0; i < letters.length(); i++) {
String restOfLetters = letters.substring(0, i) + letters.substring(i + 1);
set.addAll(getAnagramsFor(word + letters.charAt(i), restOfLetters));
}
}
return set;
}
public void run() {
System.out.println(getAnagramsFor("", "tea"));
System.out.println(getAnagramsFor("", "foo"));
}
印刷品
希望这有帮助
编辑:作为第二个解决方案,关于你的受限词典,你可以浏览你的词典,检查每个单词是否是你单词的一个拼音。在此代码中,这两种解决方案都存在,顺便说一句,原始单词不再是结果集的一部分:
private List<String> wordsToFind = Arrays.asList(new String[] { "evil", "streets", "uprising" });
private List<String> validWords = Arrays.asList(new String[] { "andes", "danes", "deans", "evil", "gals",
"lags", "levi", "live", "sedan", "slag", "streets", "testers", "uprising", "veil", "vile" });
public boolean isValidWord(String word) {
return validWords.contains(word);
}
public Set<String> getAnagramsFor(String word, String letters) {
Set<String> set = new HashSet<>(); // no duplicates because of a letter occuring more than once
if (letters.isEmpty()) {
if (isValidWord(word)) {
set.add(word);
}
} else {
for (int i = 0; i < letters.length(); i++) {
String restOfLetters = letters.substring(0, i) + letters.substring(i + 1);
set.addAll(getAnagramsFor(word + letters.charAt(i), restOfLetters));
}
}
return set;
}
public Set<String> getAnagramsFor1(String word) {
Set<String> anagrams = getAnagramsFor("", word);
anagrams.remove(word); // remove original word from the result set
return anagrams;
}
public boolean isAnagram(String str1, String str2) {
char word1[] = str1.toLowerCase().replaceAll("\\W", "").toCharArray();
char word2[] = str2.toLowerCase().replaceAll("\\W", "").toCharArray();
Arrays.sort(word1);
Arrays.sort(word2);
return (Arrays.equals(word1, word2));
}
public Set<String> getAnagramsFor2(String word) {
Set<String> anagrams = new HashSet<>();
for (String potentialAnagram : validWords) {
if (!word.equals(potentialAnagram) && isAnagram(potentialAnagram, word)) {
anagrams.add(potentialAnagram);
}
}
return anagrams;
}
带来
evil: [veil, vile, levi, live]
evil: [veil, vile, levi, live]
streets: [testers]
streets: [testers]
uprising: []
uprising: []
给定以下代码,您将获得一个单词的所有字符排列。如果您充实了isValidWord(),您可以将该设置减少到字典中的单词(allWords.txt?)。该方法根据可用字符建立排列,因此无需检查排列是否为字谜
public boolean isValidWord(String word) {
return true; // return you dictionary check here
}
public Set<String> getAnagramsFor(String word, String letters) {
Set<String> set = new HashSet<>(); // no duplicates because of a letter occuring more than once
if (letters.isEmpty()) {
if (isValidWord(word)) {
set.add(word);
}
} else {
for (int i = 0; i < letters.length(); i++) {
String restOfLetters = letters.substring(0, i) + letters.substring(i + 1);
set.addAll(getAnagramsFor(word + letters.charAt(i), restOfLetters));
}
}
return set;
}
public void run() {
System.out.println(getAnagramsFor("", "tea"));
System.out.println(getAnagramsFor("", "foo"));
}
印刷品
希望这有帮助
编辑:作为第二个解决方案,关于你的受限词典,你可以浏览你的词典,检查每个单词是否是你单词的一个拼音。在此代码中,这两种解决方案都存在,顺便说一句,原始单词不再是结果集的一部分:
private List<String> wordsToFind = Arrays.asList(new String[] { "evil", "streets", "uprising" });
private List<String> validWords = Arrays.asList(new String[] { "andes", "danes", "deans", "evil", "gals",
"lags", "levi", "live", "sedan", "slag", "streets", "testers", "uprising", "veil", "vile" });
public boolean isValidWord(String word) {
return validWords.contains(word);
}
public Set<String> getAnagramsFor(String word, String letters) {
Set<String> set = new HashSet<>(); // no duplicates because of a letter occuring more than once
if (letters.isEmpty()) {
if (isValidWord(word)) {
set.add(word);
}
} else {
for (int i = 0; i < letters.length(); i++) {
String restOfLetters = letters.substring(0, i) + letters.substring(i + 1);
set.addAll(getAnagramsFor(word + letters.charAt(i), restOfLetters));
}
}
return set;
}
public Set<String> getAnagramsFor1(String word) {
Set<String> anagrams = getAnagramsFor("", word);
anagrams.remove(word); // remove original word from the result set
return anagrams;
}
public boolean isAnagram(String str1, String str2) {
char word1[] = str1.toLowerCase().replaceAll("\\W", "").toCharArray();
char word2[] = str2.toLowerCase().replaceAll("\\W", "").toCharArray();
Arrays.sort(word1);
Arrays.sort(word2);
return (Arrays.equals(word1, word2));
}
public Set<String> getAnagramsFor2(String word) {
Set<String> anagrams = new HashSet<>();
for (String potentialAnagram : validWords) {
if (!word.equals(potentialAnagram) && isAnagram(potentialAnagram, word)) {
anagrams.add(potentialAnagram);
}
}
return anagrams;
}
带来
evil: [veil, vile, levi, live]
evil: [veil, vile, levi, live]
streets: [testers]
streets: [testers]
uprising: []
uprising: []
对于getAnagramsFor(字符串字),您可以在读取allWords.txt时构建一个映射。使用每个单词的排序版本作为键。当你想找到一个单词的字谜时,只需对字母进行排序,然后从地图上获取列表。getSortedByAnQty()应该做什么?你能举个例子吗?getSortedByAnQty()从allwords.txt中提取单词并查找字谜。这是示例的第一部分。像这样:[邪恶,利维,活着,面纱,卑鄙],[安第斯山脉,丹麦,迪恩斯,塞丹]。方法必须返回一个字谜列表。据我所知,您必须生成“可用”字母的每个排列,以获得一个单词或句子的所有字谜。我从您的示例“邪恶:[levi,live,veil,vile]”中得出结论,您只希望接受有效单词的排列,因此您需要一本字典。对于getAnagramsFor(字符串单词),您可以在阅读allWords.txt时构建一个地图。使用每个单词的排序版本作为键。当你想找到一个单词的字谜时,只需对字母进行排序,然后从地图上获取列表。getSortedByAnQty()应该做什么?你能举个例子吗?getSortedByAnQty()从allwords.txt中提取单词并查找字谜。这是示例的第一部分。像这样:[邪恶,利维,活着,面纱,卑鄙],[安第斯山脉,丹麦,迪恩斯,塞丹]。方法必须返回一个字谜列表。据我所知,您必须生成“可用”字母的每个排列,以获得一个单词或句子的所有字谜。我从您的示例“邪恶:[levi,live,veil,vile]”中得出结论,您只希望接受有效单词的排列,因此您需要一本词典。
for (String wordToFind : wordsToFind) {
System.out.println(wordToFind + ": " + getAnagramsFor1(wordToFind));
System.out.println(wordToFind + ": " + getAnagramsFor2(wordToFind));
}
evil: [veil, vile, levi, live]
evil: [veil, vile, levi, live]
streets: [testers]
streets: [testers]
uprising: []
uprising: []