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

新手上路,请多包涵

假设我有两个字符串,

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

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

 return s1.contains(s2);

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

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

除了所有这些,还有另一种(可能更好)的方法来实现这一点而不关心区分大小写吗?

原文由 Aaron 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 682
2 个回答

是的,包含区分大小写。您可以使用带有 CASE_INSENSITIVE 标志的 java.util.regex.Pattern 进行不区分大小写的匹配:

 Pattern.compile(Pattern.quote(wantedStr), Pattern.CASE_INSENSITIVE).matcher(source).find();

编辑: 如果 s2 包含正则表达式特殊字符(其中有很多),首先引用它很重要。我已经更正了我的答案,因为这是人们会看到的第一个答案,但是自从马特·奎尔指出这一点后,就投了赞成票。

原文由 Dave L. 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

原文由 Matt Quail 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题