如何检查字符串是否包含不区分大小写的单词?
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()
,你将不得不为你要查找的每个单词调用它,并且代码将是一个火车残骸。
我查看了其他类似的问题,但找不到有效的问题。我正在尝试检查此人是否回复了 意思 "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()
,你将不得不为你要查找的每个单词调用它,并且代码将是一个火车残骸。