除了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. 高效实现 std::string split() API

    Qt下一个 QString 实现split()性能.和std::string未实现它的.STL也未实现.只有自己可以写一. #include <string> #include <v ...

  2. MYSQL 体系结构图-log (踏雪无痕) (UC技术博客)

    http://www.cnblogs.com/chenpingzhao/category/690116.html http://www.cnblogs.com/chenpingzhao/p/51074 ...

  3. SGU 199 - Beautiful People 最长上升子序列LIS

    要邀请n个人参加party,每个人有力量值strength Si和魅力值 beauty Bi,如果存在两人S i ≤ S j and B i ≥ B j 或者  S i ≥ S j and B i ≤ ...

  4. Javascript 获取url参数,hash值 ,cookie

    /** * 获取请求参数 * @param key * @returns {*} */ function getRequestParameter(key){ var params = getReque ...

  5. javascript基础学习(十二)

    javascript之BOM 学习要点: 屏幕对象 History对象 Location对象 一.屏幕对象 Screen对象是一个由javascript自动创建的对象,该对象的主要作用是描述客户端的显 ...

  6. php 时间戳 总结 今日,昨日,上周,本周,最近三个月,上季,本季,去年,最近七天,今年,最近三十天

    if($time=="今日"){ $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime ...

  7. 【USACO 2.3.2】奶牛家谱

    [题目描述] 农民约翰准备购买一群新奶牛.在这个新的奶牛群中,每一个母亲奶牛都生两小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些二叉 ...

  8. Open vSwitch在openstackHavana概述

    最近再看Open vSwitch一些东西,我认为openstack官网上对这一块做了一些了解,所以就把这一块翻译出来以供参考,英语不好,翻译得很粗糙. Open vSwitch插件是最有名的核心插件之 ...

  9. Hadoop 中 IPC 的源码分析

    最近开始看 Hadoop 的一些源码,展开hadoop的源码包,各个组件分得比较清楚,于是开始看一下 IPC 的一些源码. IPC模块,也就是进程间通信模块,如果是在不同的机器上,那就可以理解为 RP ...

  10. 说一说&&符

    今天添加检测代码,还得添加好几套,好蛋疼. 为了省点事,全写在HTML的行间onclick里,为此专门琢磨了一下&&的用法. 一般用&&(除了逻辑判断里),是为了简写i ...