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

【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日

相关文章

  • 什么是zfs文件系统?zfs概念及特点简介

    什么是ZFS文件系统?ZFS概念及特点简介 简介 ZFS文件系统是一种先进的、强大的、可扩展的文件系统,最初由Sun Microsystems开发,现在由OpenZFS开发团队进行继续开发和维护。ZFS以非常独特的方式管理数据,具有数据完整性校验、数据快照、透明的压缩、RAID等先进特性,广受欢迎的文件系统之一。 ZFS文件系统的特点 存储池 ZFS通过将物…

    其他 2023年3月29日
    00
  • 迅捷CAD编辑器插入自定义对象的图文教程

    下面是“迅捷CAD编辑器插入自定义对象的图文教程”的完整攻略。 1. 前置知识 在学习如何插入自定义对象之前,需要先了解以下概念: DXF/DWG文件:AutoCAD的文件格式,本教程所使用的迅捷CAD编辑器也是基于此开发的。 ObjectARX:AutoCAD的应用程序接口,可以通过它开发插件。 自定义对象:可以在AutoCAD中插入的一种自定义图像,可以…

    other 2023年6月25日
    00
  • Vue组件封装方案实现浅析

    Vue组件封装方案实现浅析 在Vue中,组件的封装是非常重要的。封装好的组件具有高度的可复用性,易于维护和测试。本文将介绍Vue组件封装的方案,帮助开发者更好地封装组件。 一、组件封装的原则 在封装组件时,需要遵循以下原则: 尽可能地将组件拆分成更小的组件,使得功能更加明确,单一。 组件应该具有高度的可配置性,在不同的场景下能够适应不同的需求。 封装的组件应…

    other 2023年6月25日
    00
  • Linux下配置jdk环境的方法

    下面是在Linux下配置JDK环境的完整攻略: 1. 下载JDK安装包 首先需要从Oracle网站下载JDK安装包。可以访问 https://www.oracle.com/technetwork/java/javase/downloads/index.html 下载最新版的JDK安装包。一般情况下载Linux x64安装包即可。 2. 安装JDK 下载完安装…

    other 2023年6月27日
    00
  • 探索PowerShell(五) PowerShell基础知识

    以下是“探索PowerShell(五) PowerShell基础知识”的完整攻略。 PowerShell基础知识 PowerShell是什么? PowerShell是一种由微软推出的面向任务的命令行脚本语言和相应的环境。通过PowerShell,可以轻松地管理操作系统、配置Windows服务器等。与传统的命令行工具相比,PowerShell更加强大、灵活,能…

    other 2023年6月27日
    00
  • ios12 beta4固件在哪下载 苹果iOS12 beta4开发者预览版固件下载大全

    标题:iOS12 beta4固件在哪下载 苹果iOS12 beta4开发者预览版固件下载大全 简介 iOS12是苹果公司推出的全新操作系统版本,其beta4版本是为开发者预览版,包含新功能和改进的安全性能,可以供开发者进行测试。本文将为大家介绍iOS12 beta4固件下载的详细攻略,帮助开发者顺利获取iOS12 beta4版本固件。 步骤 步骤1:注册开发…

    other 2023年6月26日
    00
  • 有效防止sql注入的方法演示

    有效防止SQL注入的方法演示攻略 SQL注入是一种常见的网络安全漏洞,攻击者可以通过恶意构造的SQL查询语句来绕过应用程序的输入验证,从而执行未经授权的数据库操作。为了有效防止SQL注入攻击,我们可以采取以下方法: 1. 使用参数化查询 参数化查询是一种预编译SQL语句的方法,通过将用户输入的数据作为参数传递给查询语句,而不是将其直接拼接到查询语句中,从而防…

    other 2023年8月3日
    00
  • 完全解剖安全帐号管理器(SAM)结构

    完全解剖安全帐号管理器(SAM)结构攻略 什么是安全帐号管理器(SAM) 安全帐号管理器(Security Account Manager,SAM)是Windows操作系统中的一个重要组件,负责管理本地帐号与组的信息,包括用户名、密码哈希值、SID等。 SAM结构简介 SAM结构是由多个数据结构组成,其中最为重要的是SAM数据库和SYSTEM注册表项。 SA…

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