在Android中使用.contains()对关键字进行字符串匹配

时间:2018-10-17 09:19:39

标签: java android string string-comparison

String a = "Hello my name is Sap";

String b = "HelloisSapmyname";

String c = "Sap is my name";

String d = "Sap";



String keyword = "Sap";

当我使用.contains()时,所有字符串都是正确的。

除b以外的所有情况如何实现?

注意:如果关键字是第一个单词,则不能在关键字前添加空格。请帮忙!

编辑:添加了所有可能的条件

解决方案:在其他答案的帮助下,我找到了满足所有条件的解决方案

if (a.contains(" "+key+ " ") || a.startsWith(key+" ") 
    || a.equals(key) || a.endsWith(" "+key))

正则表达式会比这快吗?

5 个答案:

答案 0 :(得分:4)

您可以将输入String分解为单词,将其转换为List并在contains上运行List

Arrays.asList("Hello my name is Sap".split(" ")).contains("Sap")

答案 1 :(得分:2)

您可以简单地使用正则表达式。 \ b用于限制字词。

Pattern p = Pattern.compile("\\bSap\\b");

String a ="Hello my name is Sap";
Matcher m1 = p.matcher(a);
System.out.println( m1.find());// return true

String b = "HellomynameisSap";
Matcher m2=p.matcher(b);
System.out.println( m2.find());//return false

String c = "Hello Sap my name";
Matcher m3=p.matcher(c);
System.out.println( m3.find());//return true

String d = "Sap";
Matcher m4=p.matcher(d);
System.out.println( m4.find());//return true

默认情况下,它区分大小写。 如果要区分大小写,则必须像这样初始化Pattern

Pattern p = Pattern.compile("\\bsap\\b",Pattern.CASE_INSENSITIVE);

答案 2 :(得分:0)

尝试一下:

if(a.contains(" "+key+" ") || a.startsWith(key) || a.endsWith(key))

答案 3 :(得分:0)

只需尝试以下

if(Str.startsWith("Sap ") ||  Str.contains(" Sap")){
    <code>
}

答案 4 :(得分:0)

“。contains()”应该有效。

String a = "Hello my name is Sap";
String b = "HelloisSamynamep";
String c = "Sap is my name";
String d = "Sap";
String keyword = "Sap";

System.out.println(a.contains(keyword));
System.out.println(b.contains(keyword));
System.out.println(c.contains(keyword));
System.out.println(d.contains(keyword));

Output -

true
false
true
true

如果我没记错,“。contains()”在内部使用正则表达式。