Java 自定义切割方法(改进原生切割方法)

简介: Java 自定义切割方法(改进原生切割方法)

Java 自定义切割方法(改进原生切割方法)


package com.phubing;
import java.util.StringTokenizer;
/**
 * @Description 
 * @Author phubing
 * @Date 2022年4月1日 09:24:04
 **/
public class StringSplitTest {
    /**
     * 拼接出来一个用逗号分隔的超长字符串,把从 0 开始一直到 9999 的每个数字都用逗号分隔,拼接成一个超长的字符串
     * @return
     */
    public static String str(){
        String string = null;
        StringBuffer stringBuffer = new StringBuffer();
        int max = 10000;
        for(int i = 0; i < max; i++) {
            stringBuffer.append(i);
            if(i < max - 1) {
                stringBuffer.append(",");
            }
        }
        return stringBuffer.toString();
    }
    public static void main(String[] args) {
        split();
        stringTokenizer();
        myTest();
    }
    public static void split() {
        String string = str();
        long start = System.currentTimeMillis();
        for(int i = 0; i < 10000; i++) {
            string.split(",");
        }
        long end = System.currentTimeMillis();
        System.out.println("原生split耗时:" + (end - start));
    }
    /**
     * 用 StringTokenizer 可以通过 hasMoreTokens() 方法判断是否有切割出的下一个元素,
     * 如果有就用 nextToken() 拿到这个切割出来的元素,一次全部切割完毕后,
     * 就重新创建一个新的 StringTokenizer 对象。
     */
    private static void stringTokenizer(){
        String string = str();
        for(int i = 0; i < 10000; i++) {
            string.split(",");
        }
        long start = System.currentTimeMillis();
        StringTokenizer stringTokenizer = new StringTokenizer(string, ",");
        for(int i = 0; i < 10000; i++) {
            while(stringTokenizer.hasMoreTokens()) {
                stringTokenizer.nextToken();
            }
            stringTokenizer = new StringTokenizer(string, ",");
        }
        long end = System.currentTimeMillis();
        System.out.println("stringTokenizer耗时:" + (end - start));
    }
    public static void myTest() {
        String string = str();
        Long start = System.currentTimeMillis();
        for(int i = 0; i < 10000; i++) {
            customSplit(string);
        }
        Long end = System.currentTimeMillis();
        System.out.println("自定义字符串切割耗时:" + (end - start));
    }
    /**
     * 每一次切割都走一个 while 循环,startIndex 初始值是 0,然后每一次循环都找到从 startIndex 开始的下一个逗号的 index,
     * 就是 endIndex,基于 startIndex 和 endIndex 截取一个字符串出来。
     * 然后 startIndex 可以推进到本次 endIndex + 1 即可,下一次循环就会截取下一个逗号之前的子字符串了。
     * @param string
     */
    private static void customSplit(String string) {
        String remainString = string;
        int startIndex = 0;
        int endIndex = 0;
        while(true) {
            endIndex = remainString.indexOf(",", startIndex);
            if(endIndex <= 0) {
                break;
            }
            remainString.substring(startIndex, endIndex);
            startIndex = endIndex + 1;
        }
    }
}


最终测试结果:


02692c77d77f4dbe9fc95cc8e7cebaa3.png

目录
相关文章
|
3天前
|
Java
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
|
3天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
32 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
3天前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
2天前
|
Java
Java String 避免空指针的方法
Java String 避免空指针的方法
5 0
|
3天前
|
Java
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
14 4
|
3天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
15 1
|
3天前
|
存储 Java API
掌握8条方法设计规则,设计优雅健壮的Java方法
掌握8条方法设计规则,设计优雅健壮的Java方法
|
3天前
|
Java C语言
详解java方法与递归
详解java方法与递归
11 3
|
3天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
11 0
|
3天前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
15 0