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

String matching of a keyword using .contains() in Android

String a = "Hello my name is Sap";

String b = "HelloisSapmyname";

String c = "Sap is my name";

String d = "Sap";



String keyword = "Sap";

当我使用 .contains() 时,它适用于所有字符串。

除了 b 之外,如何让它在所有情况下都为真?

注意:如果关键字是第一个单词,则在关键字前添加 space 将不起作用。请帮忙!

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

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

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

正则表达式会比这更快吗?

您可以将输入 String 拆分为单词,将其转换为 List 和 运行 contains List:

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

试试这个:

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

只需尝试以下操作

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

您可以简单地使用正则表达式。 \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);

".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()”在内部使用正则表达式。