如何检查字符串是否包含不区分大小写的单词?

How do I check if a string contains a word without case sensitivity?

我查看了其他类似的问题,但找不到有效的问题。我正在尝试检查此人是否回复了 意思 "yes",所以我正在检查几个表示是的单词。但如果他们回复 "yEs",我的代码将无法工作,因为它区分大小写,我不知道该怎么做。

代码:

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"))

您可以只使用 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"))

将你的fq.contains("yes")改成这样:fq.toLowerCase().contains("yes") 所以基本上你正在将用户输入的任何内容转换为小写并与小写 yes 匹配。所以基本上你正在做。不区分大小写的匹配。

对其他条件也做同样的事情。

只需将该文本设为小写即可。并将单词存储在数组中以获得更清晰的代码。

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.
}

你最好使用专门的库:org.apache.commons.lang3.StringUtils.containsIgnoreCase("ABCDEFGHIJKLMNOP", "gHi");

你应该调用toUpperCase/toLowerCase,因为可能会发生奇怪的语言环境敏感的事情:

"ß".toUpperCase() // "SS"

要检查一个语句中的多个单词,并且不区分大小写,请使用正则表达式!

if (fq.matches("(?i).*\b(yes|Yeah|Yup|mhm|Yea|sure)\b.*"))

实际上,您需要正则表达式,因为您不需要 "I'm a yuppie",即使它包含 "Yup"。这就是 \b 术语的来源 - 它意味着 "word boundary"。如果您的代码使用 .equals() 我会更简单地建议:

if (fq.matches("(?i)yes|Yeah|Yup|mhm|Yea|sure"))

术语 (?i) 表示 "case insensitive"。

表达式(a|b|c)是一个交替| 在正则表达式中是合乎逻辑的 "OR"。

您需要 .* 两端,因为 matches() 必须匹配 整个 字符串才为真。

如果你使用 .toLowerCase().contains(),你将不得不为你要查找的每个单词调用它,并且代码将是一个火车残骸。