我们都知道要拆分一个字符串,使用String的split()方法。split的方法虽然流行好用,但是效率太低了!其实在JDK中,还有一个性能很强的纯字符串切分工具类:StringTokenizer。这个类是在JDK1.0推出的,但是发现在实际工作中很少有人使用。网上有人说不推荐使用,甚至有人说已经弃用了。真的是这样吗?StringTokenizer是否已弃用?栈长看了一些资料,原来在OracleJDK官方文档中有描述。这是OracleJDK15官方关于StringTokenizer的最新文档:StringTokenizer是一个遗留类,虽然在新代码中不鼓励使用它,但出于兼容性原因保留了它。建议任何寻求此功能的人改用String的split方法或java.util.regex包。参考:https://docs.oracle.com/en/ja...StringTokenizer原来是一个Legacy类,没有被弃用,只是为了兼容保留,新代码不鼓励使用它,推荐使用String的split方法或java.util.regex包。我们再看看StringTokenizer类的源码:可以看到StringTokenizer类没有@Deprecated标记,说明后续版本可以继续使用,官方会继续保留,不会删除它。就像JDK集合中的Vector和Hashtable类,虽然有点笨重,但不代表没有用。再加上它们没有致命的缺陷,所以一直保留到现在,并没有被废除。StringTokenizer没有人使用吗?答:不!栈长在最新的Spring5.x框架StringUtils工具类中发现了StringTokenizer的使用:org.springframework.util.StringUtils#tokenizeToStringArray另外,栈长还看到一篇文章《Faster Input for Java》,介绍了他们使用StringTokenizer进行拆分strings,比string.split()效率高4倍:我们将输入行拆分为字符串标记,因为一行可能包含多个值。为了拆分输入,StringTokenizer比字符串.split()快4倍。参考:https://www.cpe.ku.ac.th/~jim...所以,尽管JDK不鼓励使用它,但它并没有被废除,而且它的性能依然那么强,在StringTokenizer中可以起到重要的作用在一些对性能敏感的系统中,或者在对性能有要求的编程比赛中发挥作用。所以,大胆用吧,StringTokenizer还是可以用的,用得好可以有奇效!另外,我也整理了之前的Java技术系列文章,关注公众号Java技术栈,后台回复:java,可以看看,很全。StringTokenizervssplit说了这么多,相信大部分人只用过split,没有用过StringTokenizer,所以今天栈长就来对比一下这两种字符串拆分方式的性能和优劣。测试代码如下:importjava.util.Random;importjava.util.StringTokenizer;/***@author:栈长*@from:公众号Java技术栈*/publicclassSplitTest{privatestaticfinalintMAX_LOOP=10000;/***@author:栈长*@from:公众号Java技术栈*/publicstaticvoidmain(String[]args){StringBuildersb=newStringBuilder();System.out.println(sb.toString());对于(inti=0;i<1000;i++){sb.append(newRandom().nextInt()).append("");}split(sb.toString());stringTokenizer(sb.toString());}/***@author:栈长*@from:公众号Java技术栈*/privatestaticvoidsplit(Stringstr){longstart=System.currentTimeMillis();for(inti=0;i
