除了String本身的split方法,JDK在很早就提供了StringTokenizer这个类来分割字符串;

不过,由于正则表达式和String本身的功能越来越多,StringTokenizer已经被官方不建议使用了,至于原因,可参考stackoverflow上的一个问答:

http://stackoverflow.com/questions/6983856/why-is-stringtokenizer-deprecated

不过,它从jdk最初的版本一直存活到现在,总归有它存在的意义与价值,虽不建议使用,但了解总归是要了解的;

首先参考Oracle的官方文档:

http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html

其中一个原因或许就是,单从性能上来说,它的性能要优于String的split吧,不过由于正则表达式的强大,导致StringTokenizer的功能方面相对薄弱了些;

public static void main(String[] args) {
Random random = new Random();
StringBuilder string = new StringBuilder();
for (int i = 0; i < 10000000; i++) {
string.append(" " + random.nextInt(1000));
} long start = System.currentTimeMillis();
testStringTokenizer(string.toString());
long end = System.currentTimeMillis();
System.out.println("testStringTokenizer: " + (end - start) + "ms"); start = System.currentTimeMillis();
testStringSplit(string.toString());
end = System.currentTimeMillis();
System.out.println("testStringSplit: " + (end - start) + "ms"); } public static String testStringTokenizer(String str) {
StringBuilder st = new StringBuilder();
StringTokenizer stringTokenizer = new StringTokenizer(str);
while (stringTokenizer.hasMoreTokens()) {
st.append(stringTokenizer.nextToken());
}
return st.toString();
} public static String testStringSplit(String str) {
StringBuilder st = new StringBuilder();
String[] strs = str.split("\\s");
for (String string2 : strs) {
st.append(string2);
}
return st.toString();
}

对比结果:

testStringTokenizer: 476ms
testStringSplit: 2655ms

从代码层次上来看,的确是StringTokenizer要快些。

参考stackoverflow上的说法,不过具体详情可参考:https://www.cpe.ku.ac.th/~jim/java-io.html

StringTokenizer is not deprecated in fact StringTokenizer is 4X faster than String.split() and in competitive programming it is used by many developers.

参考内容有:

http://blog.csdn.net/songylwq/article/details/9016609

Java StringTokenizer分割字符串的更多相关文章

  1. java 竖线分割字符串的问题

    java 竖线分割字符串的问题 例1: String[] paraStr = "6010;320100;A".split(";"); System.out.pr ...

  2. Java中分割字符串

    java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 p ...

  3. 关于java中分割字符串

    例子:String path = "123.456.789"; 如果要使用“.”将path分割成String[], path.split("//."); or ...

  4. Android--split()分割字符串特殊用法

    split()分割字符串 1.不同环境下的区分 Java:分割字符串不能写成split("$")//$为要分割的字符Android:分割字符串需要加上中括号split(" ...

  5. Java StringTokenizer 类使用方法,字符串分割

    Java StringTokenizer 属于 java.util 包,用于分隔字符串. StringTokenizer 构造方法: StringTokenizer(String str) :构造一个 ...

  6. Java开发笔记(三十七)利用正则串分割字符串

    前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...

  7. java通过StringToKenizer获取字符串中的单词根据空格分离-简写版

    public class StringToKenizer { public static void main(String[] args) { String strin = "Hello J ...

  8. java通过StringToKenizer获取字符串中的单词根据空格分离-详情版

    public class DaXie { public static void main(String[] args) { String strin = "Hello Java World! ...

  9. js,java,jstl多分隔符分割字符串

    1.js多分隔符 分割字符串 var username = “zhao,li;wang.liu”: var arr = str.split(/;|:|,|,|./);  括号里面可以写多分割符号,中英 ...

随机推荐

  1. linux的文本管道连接处理技巧

    举例1: strace -f -e open cpp Hello.cpp -o /dev/null 2>&1 | grep -v ENOENT | awk '{print $3}' 1) ...

  2. C#使用DataSet类、DataTable类、DataRow类、OleDbConnection类、OleDbDataAdapter类编写简单数据库应用

    //注意:请使用VS2010打开以下的源代码. //源代码地址:http://pan.baidu.com/s/1j9WVR using System; using System.Collections ...

  3. POJ 3162 Walking Race(树的直径+单调队列)

    题目大意:对一棵树,求出从每个结点出发能到走的最长距离(每个结点最多只能经过一次),将这些距离按排成一个数组得到dis[1],dis[2],dis[3]……dis[n] ,在数列的dis中求一个最长的 ...

  4. Day9 - Python 多线程、进程

    Python之路,Day9, 进程.线程.协程篇   本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...

  5. js页面加载事件

    <body onload="myfunction()" > </body> <script type="text/javascript&qu ...

  6. .Net程序员 Solr-5.3之旅 (一)Solr入门

    阅读目录 引言 Lunece是什么? Solr是什么 JAVA环境搭建 JAVA环境搭建之变量配置 Tomcat简单配置 结尾 引言 君子生非异也,善假于物也. Java和.Net哪个好,我们也不需要 ...

  7. C# 汉字的字符串截取指定字节的长度

    int index = 0;            int setCharCount = 74;            string str1 = "三星 SCH-I829 电信3G手机(优 ...

  8. 关于线程池ThreadPool的学习

    学习重点ThreadPool.SetMinThreads(out workerThreads, out completionPortThreads).这是整个线程池的关键.  而ThreadPool. ...

  9. 网络流转换为Byte数组

    /// <summary> /// 网络流转换为Byte数组 /// </summary> /// <param name="stream">& ...

  10. Mysql 应该选择什么引擎

    对于如何选择存储引擎,可以简答的归纳为一句话:“除非需要用到某些INNODB 不具备的特性,并且没有其他办法可以替代,否则都应该选择INNODB 引擎”.例如:如果要用到全文索引,建议优先考虑INNO ...