在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()) { }