在Java中包含不带前缀和后缀的()方法

在Java中包含不带前缀和后缀的()方法,java,string,Java,String,我陷入了一个(我认为很简单)String验证。我使用以下方法从EditText中获取文本,该文本可以有420个字符,必须包含特定的单词(无论其位置如何): 然而,我想改善这种状况。例如,您有: String a = "This not a MetaStackOverflow question"; String b = "stackoverflow"; 您想知道a是否包含b不区分大小写,然后执行以下操作: if(a.toLowerCase().contains(b)) { } 此条件

我陷入了一个(我认为很简单)
String
验证。我使用以下方法从
EditText
中获取文本,该文本可以有420个字符,必须包含特定的单词(无论其位置如何):

然而,我想改善这种状况。例如,您有:

String a = "This not a MetaStackOverflow question"; 
String b = "stackoverflow";  
您想知道
a
是否包含
b
不区分大小写,然后执行以下操作:

if(a.toLowerCase().contains(b)) { }  
此条件为真,因为实际上
a
包含
StackOverflow
。但是,
a
并不完全包含
b
,有一个前缀为
Meta
。这不是一个完全相同的词。。我试图在SO和其他Java网站上找到一种方法,但没有结果

如何改进
contains()
方法,只查找准确的
字符串,而不带前缀或后缀?我是否应该使用另一种方法(如
containsOnly()
,我已经尝试过了,但似乎字符串没有定义,而是检查它是否包含数字/字母/等字符)

编辑:

加上“两个空格”的验证非常有吸引力和独创性。但是,如果特定的文本在句子的末尾,我们添加了一个
,这将不起作用,不是吗

a = "This is great. This is on StackOverflow." // false because we have "."

在所需图案前后使用空格:

if(a.toLowerCase().contains(" " + b + " ")) { } 

你可以在这里使用正则表达式
Matcher
类有一个
find()
方法,用于搜索字符串中的模式。这将有助于:

Matcher matcher = Pattern.compile("(?i)\\b" + Pattern.quote(b) + "\\b").matcher(a);
if (matcher.find()) {
    // contains
}

(?i)
是不区分大小写的嵌入标志
Pattern.quote()
用于转义搜索字符串中的正则表达式元字符(如果有的话)。

您可以使用不区分大小写的
\\b
来执行此操作:

String a = "This not a MetaStackOverflow question";
String b = "stackoverflow";
Pattern p = Pattern.compile("\\b" + b + "\\b", Pattern.CASE_INSENSITIVE);
if (p.matcher(a).find()) { }

是的,我看到了一些
regex match
方法,但与另一种方法相同,如果单词在
之前,我会遇到一些问题(请参阅我更新的答案)。无论如何,谢谢。@Fllo相应地更新了答案。在这种情况下使用单词边界。非常有效,我知道这很简单,非常感谢。是的,这取决于你想要什么:)在这种情况下使用Rohit Jain的答案。
String a = "This not a MetaStackOverflow question";
String b = "stackoverflow";
Pattern p = Pattern.compile("\\b" + b + "\\b", Pattern.CASE_INSENSITIVE);
if (p.matcher(a).find()) { }