java - 我检查单词是否在一串字母中的方法永远不会返回true
问题描述
我正在尝试制作一个字轮求解器,它在 python 中正常工作,但我无法将它移植到 Java / Android。它不返回任何内容,也就是说,有效单词的结束集始终为空。
这些文件位于资产/字典中。
我可以将字典文件的每一行打印到日志中,没问题,但实际上检查它们是否包含某些可选和必需的字母是我卡住的地方。
字典文件按字母划分以节省时间。
java文件
for(String letter : allLettersSet) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(getAssets().open("dictionary/" + letter.toLowerCase() + ".txt")));
Log.d("myTag", "opening " + "dictionary/" + letter.toLowerCase() + ".txt");
String line;
line = reader.readLine();
while (line != null) {
// Log.d("myTag",line);
if(checkLetters(line.toUpperCase(), optionalLetters, requiredLetters)) {
validWordsList.add(line);
}else{
// Log.d("myTag", "Returned False...");
}
}
reader.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
Log.d("myTag","Valid words are -> " + validWordsList);
}
public boolean checkLetters(String word, ArrayList<String> optionalList, ArrayList<String> requiredList) {
ArrayList<String> optionalListEditable = new ArrayList<>(optionalList);
ArrayList<String> requiredListEditable = new ArrayList<>(requiredList);
ArrayList<String> wordListEditable = new ArrayList<>(Arrays.asList(word));
ArrayList<String> requiredListEditable2 = new ArrayList<>(requiredList);
for(String letter : wordListEditable) {
if (optionalListEditable.contains(letter)) {
optionalListEditable.remove(letter);
} else if (requiredListEditable.contains(letter)) {
requiredListEditable.remove(letter);
} else {
return false;
}
}
for(String letter : requiredListEditable2) {
if (word.contains(letter)) {
requiredListEditable2.remove(letter);
}else {
return false;
}
}
return true;
}
allLettersSet 只是此特定运行中所有字母的集合。用户提交的字母总是大写的,所以我将 bufferedReader 的每一行都设为大写,这样就不会有大小写问题。
该函数似乎总是返回 false。它永远不会返回 true,除非我翻转函数的目的以查看哪些单词不匹配。然后它将大约 50 个单词添加到数组 List 中并停止。我担心这可能是迭代过早停止,但日志显示它迭代了所有可能的字母文件。
解决方案
推荐阅读
- android - TikTok SDK登录如何获取用户信息?
- express - 在对模型进行更改后,我们是否应该使用 Sequelize 手动修改迁移文件?
- git - 有没有办法找出哪个用户在 Git 中重命名了一个分支?
- regex - IIS URL 重写:在 url 中只添加一次斜杠
- sql - SQL Server:删除4列匹配的重复项,但将具有特定值的列保留在另一列中
- javascript - Javascript 中二维数组的 eval() 或 Function() 的替代方法?
- sql - 多边形 PostGIS 上的 ST_Intersect:JOIN/ON 的参数必须是布尔类型,而不是记录类型
- performance - Jmeter 问题:尝试从 CSV 读取数据时,@ 被 %40 替换
- python - 在 python 类中有一个不同名称的列表?
- powershell - 带有 Clixml 和 Taskscheduler 的 PowerShell 脚本