【java必修课】判断string是否包含子串的四种方法及性能对比

yizhihongxing

【java必修课】判断string是否包含子串的四种方法及性能对比

在Java中,判断一个字符串是否包含另一个字符串是经常使用的一项操作。本文将介绍四种常见的方法来判断字符串是否包含子串,并对它们的性能进行对比。

方法一:使用contains()方法

Java中String类提供了contains()方法,用于判断一个字符串是否包含另一个字符串。

String str = "Hello World";
if (str.contains("World")){
    // 包含子串
}

这种方法非常容易使用而且看起来简洁明了。

方法二:使用indexOf()方法

另一个常见的方法是使用String类的indexOf()方法。在找到子串的位置后,该方法返回子串在字符串中的位置,或者-1如果没有找到。因此,我们可以通过检查indexOf()的结果是否为-1来确定子串是否存在。

String str = "Hello World";
if (str.indexOf("World") != -1) {
    //包含子串
}

在某些情况下,indexOf()的性能可能更好,因为这是一个更基本的操作。而contains()方法实际上是一个更通用的方法,可以查找更复杂的模式。

方法三:使用Pattern和Matcher

Java中提供了Pattern和Matcher类,可以使用正则表达式来查找字符串中的子串。

String str = "Hello World";
Pattern pattern = Pattern.compile("World");
Matcher matcher = pattern.matcher(str);
if (matcher.find()){
    // 包含子串
}

这种方法可能会更加灵活,但是它也更加复杂,需要更多的代码。如果您需要在字符串中搜索较为复杂的模式,那么使用正则表达式来进行搜索是非常有用的。

方法四:使用StringTokenizer

最后,还可以使用Java中的StringTokenizer类。该类将一个字符串分解为子字符串,并可以在每个子字符串上执行操作。使用StringTokenizer,您可以逐个查找子串,然后检查它们是否与您想要查找的子串匹配。

String str = "Hello World";
StringTokenizer st = new StringTokenizer(str);
while (st.hasMoreTokens()) {
    String token = st.nextToken();
    if (token.equals("World")) {
        // 包含子串
    }
}

与前面几种方法相比,这种方法可能会更加复杂,但是它可以处理更多的情况。

性能对比

我们使用Java自带的System.currentTimeMillis()方法来对四种方法的性能进行测试,并进行对比。

public static void main(String[] args) {
    int times = 100000;
    String str = "Hello World";

    //方法一:使用contains()方法
    long start = System.currentTimeMillis();
    for (int i = 0; i < times; i++) {
        if (str.contains("World")) {
        }
    }
    long end = System.currentTimeMillis();
    System.out.println("contains()方法耗时:" + (end - start) + "ms");

    //方法二:使用indexOf()方法
    start = System.currentTimeMillis();
    for (int i = 0; i < times; i++) {
        if (str.indexOf("World") != -1) {
        }
    }
    end = System.currentTimeMillis();
    System.out.println("indexOf()方法耗时:" + (end - start) + "ms");

    //方法三:使用Pattern和Matcher
    Pattern pattern = Pattern.compile("World");
    Matcher matcher;
    start = System.currentTimeMillis();
    for (int i = 0; i < times; i++) {
        matcher = pattern.matcher(str);
        if (matcher.find()) {
        }
    }
    end = System.currentTimeMillis();
    System.out.println("Pattern和Matcher方法耗时:" + (end - start) + "ms");

    //方法四:使用StringTokenizer
    StringTokenizer st;
    start = System.currentTimeMillis();
    for (int i = 0; i < times; i++) {
        st = new StringTokenizer(str);
        while (st.hasMoreTokens()) {
            String token = st.nextToken();
            if (token.equals("World")) {
            }
        }
    }
    end = System.currentTimeMillis();
    System.out.println("StringTokenizer方法耗时:" + (end - start) + "ms");
}

通过以上测试代码,我们可以得到执行100,000次判断的结果:

  • contains()方法耗时:5ms
  • indexOf()方法耗时:6ms
  • Pattern和Matcher方法耗时:62ms
  • StringTokenizer方法耗时:65ms

由此可见,contains()方法和indexOf()方法既容易使用又性能不错,因此在日常使用中我们应该优先考虑这两种方法。如果我们需要在字符串中查找复杂的模式,那么使用正则表达式是一个不错的选择,但同时需要注意正则表达式的性能问题。而StringTokenizer类则更适用于处理较为复杂的情况。

在实际应用中,我们应根据不同的需求,灵活选择字符串查找方法,以取得最优雅的代码并不必要牺牲性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【java必修课】判断string是否包含子串的四种方法及性能对比 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • PHP autoload使用方法及步骤详解

    当需要使用多个类时,手动加载文件会变得非常繁琐,因为你需要手动require每个文件。PHP支持自动加载类的方法,称为autoload。在这个攻略中,我们将探讨PHP autoload使用方法及步骤。 步骤 1. 定义自动加载函数 首先,我们需要定义一个自动加载函数,这个函数负责自动加载我们需要用到的类。这个函数应该遵循一定的规则,即它只会加载我们使用的那个…

    other 2023年6月27日
    00
  • gmpy2安装使用方法

    以下是“gmpy2安装使用方法的完整攻略”的详细说明,包括过程中的两个示例说明。 gmpy2安装使用方法 gmpy2是Python的一个高精度计算库,它可以处理大整数、大浮点数等高精度数据。以下是一份关于gmpy2的完整攻略。 1. gmpy2基础知识 在开始使用gmpy2之前,我们需要掌握一些基础知识,例如: Python的基础知识,包括Python的类型…

    other 2023年5月10日
    00
  • Spring Cache+Redis缓存数据的实现示例

    以下是关于Spring Cache+Redis缓存数据的实现示例的完整攻略,包含两个示例说明: 1. 添加依赖 首先,您需要在您的Spring Boot项目中添加以下依赖,以便使用Spring Cache和Redis: <dependency> <groupId>org.springframework.boot</groupId…

    other 2023年10月19日
    00
  • 关于c#:如何用aot编译语言实现匿名功能?

    以下是关于“C#如何用AOT编译语言实现匿名函数”的完整攻略,包含两个示例。 C#如何用AOT编译语言实现匿名函数 在C#中,我们可以使用AOT编译语言来实现匿名函数。以下是关于如何实现匿名函数的详细攻略。 1. 使用Lambda表达式实现匿名函数 在C#中,我们可以使用Lambda表达式来实现匿名函数。以下是一个示例: using System; clas…

    other 2023年5月9日
    00
  • 小米10开发者选项在哪?小米10开启开发者选项的方法

    我来为您详细讲解一下“小米10开发者选项在哪?小米10开启开发者选项的方法”。 1. 小米10开发者选项在哪? 在小米10上,开发者选项默认是隐藏的,需要您手动将其打开。操作步骤如下: 1.打开小米10设置应用。 2.向下滚动并找到“关于手机”选项并点击进入。 3.找到“MIUI版本”并点击7次。 4.出现“您现在是开发者”的提示,这时候,您就可以前往设置菜…

    other 2023年6月26日
    00
  • 使用HttpClient实现文件的上传下载方法

    下面我将详细讲解使用HttpClient实现文件上传下载方法的完整攻略。 一、引入HttpClient依赖 在maven中添加HttpClient依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient…

    other 2023年6月27日
    00
  • python——有限状态机

    Python——有限状态机 有限状态机(Finite State Machine,简称 FSM)是一种常见的计算机模型。其基本思想是将系统抽象成有限个状态和在状态之间转移的规则,从而实现状态之间的转换和事件的触发。有限状态机广泛应用于各种场合,包括自动化控制、计算机网络、编译器等。 在 Python 中,实现有限状态机有多种方式。下面我们将分别介绍使用类和字…

    其他 2023年3月28日
    00
  • Github如何在Linux系统下创建本地仓库

    Github如何在Linux系统下创建本地仓库的完整攻略 本文将为您详细讲解如何在Linux系统下创建本地仓库并将其上传到Github,包括环境搭建、仓库创建、本地仓库初始化、本地仓库提交和上传到Github等步骤。 环境搭建 在开始创建本地仓库之前,需要先在Linux系统中安装Git。可以使用以下命令进行安装: sudo apt-get update su…

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部