【发布时间】:2020-02-20 10:33:35
【问题描述】:
我需要编写一个程序,将整个文本文件读入字符串并在其中搜索字谜。输出必须是同一类型的所有字谜,位于单独的行中,并带有原始的大写和小写字母。
我尝试了以下方法,但没有给我想要的结果(显然都是小写):
String input = inputStringBuilder.toString();
input = input.replaceAll("[^äÄöÖüÜßa-zA-Z ]", "").toLowerCase();
String[] sentence = input.split(" ");
Map<String, Set<String>> anagrams = new HashMap<>();
for(int i = 0; i < sentence.length; i++){
char[] charwords = sentence[i].toCharArray();
Arrays.sort(charwords);
String key = new String(charwords);
Set<String> anagramSet = anagrams.get(key);
if (anagramSet == null) {
anagramSet = new HashSet<>();
anagrams.put(key, anagramSet);
}
anagramSet.add(sentence[i]);
}
【问题讨论】:
-
你明白什么是字谜吗?我在代码中没有看到您甚至尝试检查字谜的任何地方。
-
@MushifAliNawaz 是的,我知道它的作用。这就是我的问题。如果我删除它,整个事情就不再起作用了(因为大小写字符不一样)
-
将
.toLowerCase()从input语句移动到charwords语句:char[] charwords = sentence[i].toLowerCase().toCharArray();--- 您想要键入无大小写(在sort()之前),但是sentence数组中的单词具有原始大小写。 -
@Andreas 这行得通,但它保留了重复项(当然不是字谜)
-
什么重复?您存储在
Map和Set中,两者都不允许重复。