如何在Java中以不区分大小写的方式检查字符串是否包含另一个字符串?

时间:2020-03-05 18:59:47  来源:igfitidea点击:

说我有两个弦,

String s1 = "AbBaCca";
String s2 = "bac";

我想执行一次检查,返回" s1"中包含" s2"。我可以这样做:

return s1.contains(s2);

我很确定contains()是区分大小写的,但是我不能通过阅读文档确定这一点。如果是这样,我想我最好的方法将是这样的:

return s1.toLowerCase().contains(s2.toLowerCase());

除了所有这些,是否还有另一种(可能更好)的方法可以完成此任务而不关心区分大小写?

解决方案

回答

是的,包含的内容区分大小写。我们可以将java.util.regex.Pattern与CASE_INSENSITIVE标志一起使用,以区分大小写:

Pattern.compile(Pattern.quote(s2), Pattern.CASE_INSENSITIVE).matcher(s1).find();

编辑:如果s2包含正则表达式特殊字符(其中有很多),则首先引用它很重要。我已经纠正了我的答案,因为这是第一个人们会看到的答案,但是请投票支持Matt Quail的答案,因为他指出了这一点。

回答

我不确定主要问题是什么,但是是的,.contains区分大小写。

回答

Dave L.回答的一个问题是,当s2包含正则表达式标记时,例如" \ d"等。

我们想在s2上调用Pattern.quote():

Pattern.compile(Pattern.quote(s2), Pattern.CASE_INSENSITIVE).matcher(s1).find();

回答

是的,这是可以实现的:

String s1 = "abBaCca";
String s2 = "bac";

String s1Lower = s1;

//s1Lower is exact same string, now convert it to lowercase, I left the s1 intact for print purposes if needed

s1Lower = s1Lower.toLowerCase();

String trueStatement = "FALSE!";
if (s1Lower.contains(s2)) {

    //THIS statement will be TRUE
    trueStatement = "TRUE!"
}

return trueStatement;

此代码将返回字符串" TRUE!"。因为它发现角色已被收容。

回答

String x="abCd";
System.out.println(Pattern.compile("c",Pattern.CASE_INSENSITIVE).matcher(x).find());