【问题标题】:Ignore case for 'contains' for a string in Java [duplicate]忽略Java中字符串“包含”的大小写[重复]
【发布时间】:2013-05-12 08:51:49
【问题描述】:

考虑:

public static void main(String[] args) {

    String s = "AbcD";

    System.out.println(s.contains("ABCD"));
    System.out.println(s.contains("AbcD"));
}

输出:

false
true

无论哪种情况,我都需要结果在这两种情况下都是正确的。有可能吗?

【问题讨论】:

标签: java string


【解决方案1】:

在使用contains之前,您需要将两个字符串转换为相同的大小写

s.toLowerCase().contains("ABCD".toLowerCase());

【讨论】:

  • 这不一定有效,因为大小写转换是特定于语言环境的。 "i".toLowerCase().contains("I".toLowerCase()) 可以例如返回 false。
  • @jarnbjo 我在我的位置(中东)、美国和英语进行了测试,但事实并非如此。你的意思是什么位置?
  • @David 任何带有偏离大写/小写规则的语言环境都不会按预期工作。对于土耳其语,"I".toLowerCase(); 将例如返回"ı" 而不是"i"
【解决方案2】:

你可以使用org.apache.commons.lang3.StringUtils.containsIgnoreCase(String, String)

StringUtils.containsIgnoreCase(s, "ABCD") 返回真

Apache 文档here

【讨论】:

  • 我认为这是最好的答案。方便很多。 @PSR,如果这真的有帮助,我认为你应该将其标记为答案。
【解决方案3】:

并不是说它会特别有效,但您可以使用 Pattern 匹配器进行不区分大小写的匹配:

Pattern pattern = Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE);
pattern.matcher("ABCD").find();
pattern.matcher("AbcD").find();

另请注意,它不会神奇地解决语言环境问题,但它的处理方式与toLowercase(Locale) 不同,结合Pattern.UNICODE_CASE 标志,它可能能够同时处理所有语言环境。

【讨论】:

  • 为此使用 RegEx 有点低效 :)
  • @phloc 使用toLowerCase()的问题是结果取决于当前的locale。
  • 这就是为什么我建议使用小写(Locale.US)——或者你想要的任何语言环境。
  • 如果您的字符串包含特殊字符,例如 s= "example\",该怎么办。在这种情况下,此模式匹配器将失败。
【解决方案4】:

使用“toLowercase”有助于:

System.out.println(s.toLowercase(Locale.US).contains("ABCD".toLowercase (Locale.US)));

(当然你也可以用 toUppercase 代替)

【讨论】:

    【解决方案5】:

    您可以使用toLowerCase 执行此操作。像这样的:

    s.toLowerCase().contains("aBcd".toLowerCase());
    

    【讨论】:

      【解决方案6】:

      试试下面的。如果字符串匹配,它将返回0...

      System.out.println(s.compareToIgnoreCase("aBcD"));
      

      它会正常工作的。

      【讨论】:

      • 包含和比较是两个不同的东西
      • @BuSaeed- 显然。
      猜你喜欢
      • 2012-12-10
      • 2015-09-12
      • 2010-09-08
      • 1970-01-01
      • 2015-07-18
      • 2011-01-17
      • 2016-09-02
      • 1970-01-01
      • 2016-08-22
      相关资源
      最近更新 更多