string切割字符串

发布时间: 2023-11-21 11:02 阅读: 文章来源:1MUMB781PS

今天给大家介绍一个小知识点,但是会非常的实用,就是平时我们写Java代码的时候,如果要对字符串进行切割,我们巧妙的运用一些技巧,可以把性能提升5~10倍。下面不说废话,直接来给大家上干货!

工作中常用的split()切割字符串效率高吗?

首先,我们用下面的一段代码,去拼接出来一个用逗号分隔的超长字符串,把从0开始一直到9999的每个数字都用逗号分隔,拼接成一个超长的字符串,以便于我们可以进行实验,代码如下所示:

public class StringSplitTest {public static void main(String[] args) {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(",");}}string = stringBuffer.toString();}}

接着我们可以用下面的代码来测试一下,如果用最基础的split方法来对超长字符串做切割,循环切割1w次,要耗费多长时间,看如下代码测试:

public class StringSplitTest {public static void main(String[] args) {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(",");}}string = stringBuffer.toString();long start = System.currentTimeMillis();for(int i = 0; i < 10000; i++) {string.split(",");}long end = System.currentTimeMillis();System.out.println(end - start);}}

经过上面代码的测试,最终发现用split方法对字符串按照逗号进行切割,切割1w次是耗时2000多毫秒,这个不太固定,大概是2300毫秒左右。

JDK提供字符串切割工具类StringTokenizer

接着给大家介绍另外一个性能更加好的专门用于字符串切割的工具类,就是StringTokenizer,这个工具是JDK提供的,也是专门用来进行字符串切割的,他的性能会更好一些,我们可以看下面的代码,用他来进行1w次字符串切割,看看具体的性能测试结果如何:

import java.util.StringTokenizer;public class StringSplitTest {public static void main(String[] args) {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(",");}}string = stringBuffer.toString();long start = System.currentTimeMillis();for(int i = 0; i < 10000; i++) {string.split(",");}long end = System.currentTimeMillis();System.out.println(end - start);start = System.currentTimeMillis();StringTokenizer stringTokenizer =new StringTokenizer(string, ",");for(int i = 0; i < 10000; i++) {while(stringTokenizer.hasMoreTokens()) {stringTokenizer.nextToken();}stringTokenizer = new StringTokenizer(string, ",");}end = System.currentTimeMillis();System.out.println(end - start);}}

大家看上面的代码,用StringTokenizer可以通过hasMoreTokens()方法判断是否有切割出的下一个元素,如果有就用nextToken()拿到这个切割出来的元素,一次全部切割完毕后,就重新创建一个新的StringTokenizer对象。

这样连续切割1w次,经过测试之后,会发现用StringTokenizer切割字符串1w次的耗时大概是1900毫秒左右。

大家感觉如何?是不是看到差距了?换一下切割字符串的方式,就可以让耗时减少400~500ms,性能目前已经可以提升20%了。

手把手带你实现一个更高效的字符串切割工具类

接着我们来自己封装一个切割字符串的函数,用这个函数再来做一次字符串切割看看,大家先看字符串切割函数的代码:

private static void split(String string) {String remainString = string;int startIndex = 0;int endIndex = 0;while(true) {endIndex = remainString.indexOf(",", startIndex);if(endIndex
•••展开全文