Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从txt生成Java字谜_Java - Fatal编程技术网

如何从txt生成Java字谜

如何从txt生成Java字谜,java,Java,我有Java的主类。并且需要写类的字谜。 主要问题是: 但我不知道现在该怎么办。 我必须写方法: getSortedByAnQty()--返回字谜列表 String getAnagramsFor(String word)——返回wordsToFind.txt中单词的字谜列表 我该怎么做呢?根据下面的代码,您可以得到一个单词的所有字符排列。如果您充实了isValidWord(),您可以将该设置减少到字典中的单词(allWords.txt?)。该方法根据可用字符建立排列,因此无需检查排列是否为字

我有Java的主类。并且需要写类的字谜。 主要问题是:

但我不知道现在该怎么办。 我必须写方法:

  • 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: []