【问题标题】:Java - Check if user input partialy matches another string?Java - 检查用户输入是否部分匹配另一个字符串?
【发布时间】:2022-01-24 02:02:38
【问题描述】:

我有一个问题,我想查看输入用户输入的是否部分匹配,或者只要多数与答案匹配,如果匹配,那么它应该打印出“几乎正确”。 例如,假设答案是 Football,但用户输入的是 Footbol。然后它应该打印出几乎正确。

这是我尝试过的。但问题是它只是检查整个单词是否包含在 ENG 中,否则即使缺少一个 Char 也不起作用。

     if (Answer.equalsIgnoreCase(ENG)){
        r = "Correct";
    }
    else if (Answer.toLowerCase().contains(ENG.toLowerCase().)){
        r = "Almost correct";
    }
    else {
        r = "Wrong";
    }
    System.out.println(r)

【问题讨论】:

  • 看起来你需要一些模糊匹配
  • ENG 拆分成单词并计算包含多少个单词,也许?
  • 您好,欢迎您!请先 define “匹配超过 60% 的答案” ... 有多少百分比匹配“eng”和“gne”(例如)? :) (100?0?50??:)
  • 抱歉我写的有点不对,ENG只有一个字。我的意思是说如果用户输入缺少一个 CHAR,那么它就无法识别它。像上面的例子一样,当它应该说几乎正确时,写Footbol会打印出“错误”。但是如果用户输入 Footballs,那么它会显示几乎正确,因为它找到了 Football 这个词,而 S 只是附加的。如果你明白我的意思。只要大部分 CHAR 与 ENG 中的单词匹配,它就不必是 60%。
  • soundex 会满足您的需求吗? stackoverflow.com/questions/43275987/…

标签: java string


【解决方案1】:

这段代码当然不是完美的,但它基本上是比较Strings并保存有多少字符匹配另一个String中的相应字符。这当然会导致它不能很好地处理不同大小的字符串,因为它会将丢失字母之后的所有内容视为错误(除非它偶然匹配字符)。但也许它无论如何都会有所帮助:

String match = "example";
String input = "exnaplr";
int smaller;
if (match.length() < input.length())
    smaller = match.length(); else smaller = input.length();
int correct = 0;
for (int i = 0; i < smaller; i++) {
    if (match.charAt(i) == input.charAt(i)) correct++;
}
int percentage = (int) ((double) correct / match.length() * 100);

System.out.println("Input was " + percentage + "% correct!");

【讨论】:

  • 哇,这段代码完美运行,非常感谢
  • @TheGoat27 很高兴我能帮上忙
  • @TheGoat27,请考虑accepting/upvoting 有用的答案,它比“谢谢”更好
  • @AlexRudenko 它说我必须有超过 15 个代表才能投票。
猜你喜欢
  • 1970-01-01
  • 2016-10-15
  • 2013-05-16
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 2023-01-06
相关资源
最近更新 更多