Java Top.

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

有很多方法可以检查一个吗?细绳包含一个子字符串。在本文中,我们将在寻找内部的子串细绳虽然专注于不敏感的解决方法string.Contains()在Java。最重要的是,我们将提供如何解决此问题的示例。

2.最简单的解决方案:string.tolowercase.

最简单的解决方案是通过使用string.tolowercase()。在这种情况下,我们将将两个字符串转换为小写,然后使用包含()方法:

asserttrue(src.tolowercase()。包含(dest.tolowercase()));

我们也可以使用string.touppercase()它会提供相同的结果。

3。string.matches.与正则表达式

另一种选择是使用string.matches()与正则表达式:

asserttrue(src.matches(“(?i)。*”+ dest +“。*”));

火柴()方法需要s练习表示正则表达式。(?一世)启用案例不敏感。*使用除线休息之外的每个字符。

4.string.regionmatches.

我们也可以使用string.regionmatches()。它检查二是否有两个细绳区域匹配,使用真的为了Ignorecase.范围:

公共静态布尔流程处理重新触发(String SRC,String Dest){for(int i = src.length() -  dest.length(); i> = 0; i--)如果(src.regionmatches(true,i,dest,dest,0,dest.length())))返回true;返回false;}
asserttrue(ProcessRegionMatches(SRC,Dest));

为了提高性能,它开始匹配该区域,考虑到目的地的长度细绳。然后,它会减少迭代器。

5。图案与之不区分大小写选项

java.util.regex.pattern.班级为我们提供了一种使用匹配字符串的方式匹配()方法。在这种情况下,我们可以使用引用()逃避任何特殊字符的方法,以及不区分大小写旗帜。让我们来看看:

asserttrue(pattern.compile(pattern.quote(dest),pattern.case_insensitive).matcher(src).find());

6. Apache Commons.stryutils.containsignorecase.

最后,我们将利用Apache Commons.stringutils.班级

asserttrue(stringutils.containsignorecase(src,dest));

7.性能比较

如此关于使用该子串检查子串的一般文章金宝搏官网188be包含方法,我们使用了开源框架Java Microbenchmark Marness(JMH)到比较纳秒中方法的性能

  1. 模式案例_敏感正则表达式:399.387 ns.
  2. 字符串toolowcase.:434.064 ns.
  3. Apache Commons Stringutils.:496.313 ns.
  4. 字符串区域匹配:718.842 ns.
  5. 字符串与正则表达式匹配:3964.346 ns.

我们可以看到,获胜者是图案与之不区分大小写启用标志,紧随其后tolowercase()。我们还注意到Java 8和Java 11之间的性能明确提升。

结论

在本教程中,我们看几种不同的方式来检查a细绳对于子字符串,同时忽略Java中的情况。

我们看着使用string.tolowercase()touppercase()string.matches()string.regionmatches(),apache commons.stryutils.containsignorecase(), 和pattern.matcher()。find()

此外,我们评估了每个解决方案的性能,并发现使用编译()来自java.util.regex.pattern.与之不区分大小写国旗表演了最好的

一如既往,代码可用在github上

Java底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!