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