我们都知道要拆分一个字符串,使用String的split()方法。split的方法虽然流行好用,但是效率太低了!其实在JDK中,还有一个性能很强的纯字符串切分工具类:StringTokenizer。这个类是在JDK1.0推出的,但是发现在实际工作中很少有人使用。网上有人说不推荐使用,甚至有人说已经弃用了。真的是这样吗?StringTokenizer是否已弃用?栈长看了一些资料,原来在OracleJDK官方文档中有描述。这是OracleJDK15官方关于StringTokenizer的最新文档:StringTokenizer是一个遗留类,虽然在新代码中不鼓励使用它,但出于兼容性原因保留了它。建议任何寻求此功能的人改用String的split方法或java.util.regex包。参考:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/StringTokenizer.htmlStringTokenizer本来就是一个legacy类,没有被废弃,而是保留了下来出于兼容性原因。不鼓励在新代码中使用它。推荐使用String的拆分方法或者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/java-io.html所以,虽然JDK不鼓励使用,但并没有废除,性能还是一样强,StringTokenizer可以在一些对性能敏感的系统中,或者在对性能有要求的编程比赛中发挥着重要的作用。所以,大胆用吧,StringTokenizer还是可以用的,用得好可以有奇效!StringTokenizervssplit说了这么多,相信大部分人只用过split,没有用过StringTokenizer,所以今天栈长就来对比一下这两种字符串拆分方式的性能和优劣。测试代码如下:importjava.util.Random;importjava.util.StringTokenizer;/***@author:Stacklength*@from:公众号Java技术栈*/publicclassSplitTest{privatestaticfinalintMAX_LOOP=10000;/***@author:栈长*@from:公众号Java技术栈*/publicstaticvoidmain(String[]args){StringBuildersb=newStringBuilder();System.out.println(sb.toString());for(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
