文档章节

StringTokenizer和Split性能比较

l
 lzg14
发布于 2014/06/03 17:12
字数 264
阅读 9014
收藏 6

朋友问我的问题,网上搜了下,都说StringTokenizer性能要好些,不过也有反对意见,还是自己试验下。

一百万以空格区分的字符串,拆分后重新组成不带空格的串。

import java.util.Random;
import java.util.StringTokenizer;
/**
 * 
 * @author Jason Li 2014-6-3
 * StringTokenizer和Spilt速度比较
 *
 */
public class StringTest {

	public static void main(String[] args) {
		String str = buildString(1_000_000); //1.7新特性, 1000000
		long start;
		long end;
		
		System.out.println("-----------StringTokenizer start-----------");		
		start = System.currentTimeMillis();
		StringTokenizer st = new StringTokenizer(str);
		StringBuilder sb = new StringBuilder();
		while(st.hasMoreTokens()){
			sb.append(st.nextToken());
		}
		end = System.currentTimeMillis();
		System.out.println("StringTokenizer time use:" + (end-start));
		
		System.out.println("-----------StringSpilt start-----------");		
		start = System.currentTimeMillis();
		StringBuilder sb2 = new StringBuilder();
		String[] strs = str.split("\\s");
		for(String s: strs){
			sb2.append(s);
		}
		end = System.currentTimeMillis();
		System.out.println("StringSpilt time use:" + (end-start));		
		
	}
	
	//建立一个长字符串,
	//其中有空格,以便拆分成length长度的n个字符串
	private static String buildString(int length) {
		StringBuilder sb = new StringBuilder();
		Random r =new Random();
		for (int i = 0; i <length;i++ ){
			for (int j = r.nextInt(10); j>0 ;j--){
				sb.append((char)('a' + r.nextInt(26)));
			}
			sb.append(" ");
		}		
		return sb.toString();
	}
}



输出:
-----------StringTokenizer start-----------
StringTokenizer time use:131
-----------StringSpilt start-----------
StringSpilt time use:509



结论:

StringTokenizer确实更快些,至于为什么jdk里不推荐使用了,还要再研究。

© 著作权归作者所有

共有 人打赏支持
l
粉丝 8
博文 29
码字总数 11715
作品 0
朝阳
加载中

评论(8)

happycode
happycode
如果用其它分隔符,如$,测试结果
=============StringTokenizer: 456
=============split 1470
l
lzg14

引用来自“krl421x”的评论

就像一楼讲的,String.Split()使用正则表达式,而StringTokenizer的只是使用逐字分裂的字符。逐字分解,在java文档中不建议使用。并且,我个人认为 split结合正则表达式要强大的多,完全可以取代StringTokenizer。个人观点。
取代不取代不管,只是纯比较下性能,
l
lzg14

引用来自“krl421x”的评论

你这个测试没多大意义。首先,第29行字符串分割,不建议用\\s, \\s比较少用,空格匹配一般用\\t。\\s有bug,你换成String[] strs = str.split("\\t");后测试,会发现-----------StringTokenizer start-----------
StringTokenizer time use:124
-----------StringSpilt start-----------
StringSpilt time use:81
StringSpilt 用时少。
我拼的串用的是" ",里边一个制表符都没有,\\t根本没分割开啊
krl421x
krl421x
就像一楼讲的,String.Split()使用正则表达式,而StringTokenizer的只是使用逐字分裂的字符。逐字分解,在java文档中不建议使用。并且,我个人认为 split结合正则表达式要强大的多,完全可以取代StringTokenizer。个人观点。
krl421x
krl421x
慎用\\s . http://blog.chinaunix.net/uid-20587169-id-1919274.html
krl421x
krl421x
你这个测试没多大意义。首先,第29行字符串分割,不建议用\\s, \\s比较少用,空格匹配一般用\\t。\\s有bug,你换成String[] strs = str.split("\\t");后测试,会发现-----------StringTokenizer start-----------
StringTokenizer time use:124
-----------StringSpilt start-----------
StringSpilt time use:81
StringSpilt 用时少。
l
lzg14

引用来自“kidding”的评论

主要是
String[] strs = str.split("\\s");
一次性就把所有的数据都处理完相当于遍历了所有的数据并划分了内存去存储,而stringtokenizer是顺序一个个的来处理
那你的结论是?
k
kidding
主要是
String[] strs = str.split("\\s");
一次性就把所有的数据都处理完相当于遍历了所有的数据并划分了内存去存储,而stringtokenizer是顺序一个个的来处理
String 的 split、subString,外加StringTokenizer之性能比较

最近在阅读java.lang下的源码,读到String时,突然想起面试的时候曾经被人问过:都知道在大数据量情况下,使用String的split截取字符串效率很低,有想过用其他的方法替代吗?用什么替代?我当...

一直在努力
2012/03/01
0
0
java中subString、split、stringTokenizer三种截取字符串方法的性能比较

最近在阅读java.lang下的源码,读到String时,突然想起面试的时候曾经被人问过:都知道在大数据量情况下,使用String的split截取字符串效率很低,有想过用其他的方法替代吗?用什么替代?我当...

candies
2014/02/28
0
0
String的substring、split,外加StringTokenizer三者截取字符串...

最近在阅读java.lang下的源码,读到String时,突然想起面试的时候曾经被人问过:都知道在大数据量情况下,使用String的split截取字符串效率很低,有想过用其他的方法替代吗?用什么替代?我当...

一堆BUG
2012/02/27
0
2
Java 程序优化:字符串操作、基本运算方法等优化策略(一)

针对 Java 程序编写过程中的实际问题,本文分为两部分,首先对字符串相关操作、数据切分、处理超大 String 对象等提出解决方案及优化建议,并给出具体代码示例;然后对数据定义、运算逻辑优化...

Mysoft
2015/09/25
46
0
Java性能优化之String字符串优化

字符串是软件开发中最重要的对象之一。通常,字符串对象在内存中是占据了最大的空间块,因此如何高效地处理字符串,必将是提高整体性能的关键所在。 1.字符串对象及其特点 Java中八大基本数据...

像风一样i
08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
5分钟前
0
0
Ubuntu集群-使用MAAS进行裸机安装

Ubuntu使用MAAS装机的七个步骤。 1、Setup your hardware You need one small server for MAAS and at least one server which can be managed with a BMC. It is recommended to have the M......

openthings
17分钟前
0
0
OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
4
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部