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

时间:2016-09-03 14:13:31

标签: java string contains case-insensitive

我看了这样的其他问题,但我找不到一个有用的问题。我试图检查这个人是否回复了意思"是",所以我要检查几个含义的词。但是,如果他们回复了" 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"))

5 个答案:

答案 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(),你必须为你正在寻找的每个单词调用它,而代码将是火车残骸。