我看了这样的其他问题,但我找不到一个有用的问题。我试图检查这个人是否回复了意思"是",所以我要检查几个含义的词。但是,如果他们回复了" yE",我的代码因为区分大小写而无法工作,而且我不知道该怎么做。
代码:
String fq = JOptionPane.showInputDialog(null, "Welcome to RadinBot! Would you like to continue?", "RadinBot", JOptionPane.YES_NO_CANCEL_OPTION);
if (fq.contains("yes") ||
fq.contains("Yeah") ||
fq.contains("Yup") ||
fq.contains("mhm") ||
fq.contains("Yea") ||
fq.contains("sure"))
答案 0 :(得分:4)
您可以使用toLowerCase()
删除区分大小写:
if (fq.toLowerCase().contains("yes") || fq.toLowerCase().contains("yeah") || fq.toLowerCase().contains("yup") || fq.toLowerCase().contains("mhm") || fq.toLowerCase().contains("yea") || fq.toLowerCase().contains("sure"))
答案 1 :(得分:1)
将您的fq.contains("yes")
更改为:fq.toLowerCase().contains("yes")
所以基本上你将任何用户输入的内容转换为小写并与小写yes
匹配。所以基本上你在做。不区分大小写的匹配。
也适用于其他条件。
答案 2 :(得分:1)
只需将该文字放入小写字母即可。并将单词存储在数组中以获得更清晰的代码。
String words[] = ["yes", "yeah", "mhm", "yup"];
boolean accept = false;
for (int i=0; i<words.length(); i++){
if (text.toLowerCase().contains(words[i])){
accept = true;
break;
}
}
if (accept){
//do what you want to do.
}
答案 3 :(得分:0)
您应该更好地使用专业库:org.apache.commons.lang3.StringUtils.containsIgnoreCase("ABCDEFGHIJKLMNOP", "gHi");
你快照而不是调用toUpperCase/toLowerCase
,因为可能会发生奇怪的区域设置敏感事件:
"ß".toUpperCase() // "SS"
答案 4 :(得分:0)
要检查一个语句中的多个单词,并且不区分大小写,请使用正则表达式!
if (fq.matches("(?i).*\\b(yes|Yeah|Yup|mhm|Yea|sure)\\b.*"))
实际上,你需要正则表达式,因为你不想要“我是一个雅皮士”,即使它包含“Yup”。这就是\b
术语所在的位置 - 它意味着“单词边界”。如果您的代码使用.equals()
我会更简单地建议:
if (fq.matches("(?i)yes|Yeah|Yup|mhm|Yea|sure"))
术语(?i)
表示“不区分大小写”。
表达式(a|b|c)
是交替; |
是正则表达式中的逻辑“或”。
您需要.*
,因为matches()
必须与整个字符串匹配才能生效。
如果你使用.toLowerCase().contains()
,你必须为你正在寻找的每个单词调用它,而代码将是火车残骸。