在Java中没有前缀和后缀的contains()方法

时间:2014-04-06 11:46:23

标签: java string

我坚持(简单,我认为) String验证。我使用以下方法从EditText获取文本,其中包含420个字符,必须包含特定字(无论其位置):

if(edittext.getText().toString().toLowerCase().contains(stringToHave)) { }
// stringToHave = the specific String  

但是,我想改善这种状况。例如,你有这个:

String a = "This not a MetaStackOverflow question"; 
String b = "stackoverflow";  

您想知道a是否包含b,无论区分大小写,请执行以下操作:

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

此条件 true ,因为确实a包含StackOverflow。但是,a 并不完全包含 b,前缀为Meta。这不是完全相同的单词..我试图在SO和其他Java网站上找到一种没有结果的方法。

如何才能改进contains()方法,只查找没有前缀或后缀的完全 String?我应该使用另一种方法(作为containsOnly(),我已经尝试过了,但似乎未定义String,它检查它是否包含数字/字母/等.chars)

编辑:

添加一个"两个空格"验证是非常有吸引力和巧妙的。但是,如果特定文字位于句子的末尾,并且我们添加了.,这将无效,不是吗?

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

3 个答案:

答案 0 :(得分:3)

在模式之前和之后使用空格:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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

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