文档章节

StringTokenizer和Split性能比较

l
 lzg14
发布于 2014/06/03 17:12
字数 264
阅读 9036
收藏 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
Split()拆分字符串与StringTokenizer拆分字符串

前言 不管用何种编程语言写代码,对字符串的处理都是必不可少的,其中对字符串的拆分在许多场合都频繁用到。 今天介绍Java中两种主流的拆分方法,一是lang包String类的split()方法,另一种则是...

绝地逢生
11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis数据结构

redis不只是一个简单的键(key)-值(value)数据库,实际上它是一个数据结构服务器,支持各种类型的值。也就是说,在传统的键-值数据库中,你把字符串键与字符串值联系起来,而在redis,值不仅限...

hblt-j
15分钟前
2
0
MySQL事务的的介绍及使用

1. 事务的特性 1.1 原子性(Atomicity): 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 1.2. 一致性(Consistency): 在一个事务中,事务的前后数据的完...

kuchawyz
20分钟前
1
0
[sed] 将 the 和 statement 之间的单词变为全大写

-bash-4.1$ cat textfind the Match statementConsult the Get statementusing the Read statement to retrieve data-bash-4.1$ cat sedsrc1/the .* statement/{hs/.*the (.......

圣洁之子
21分钟前
1
0
curl 编译安装(openssl)

//依赖安装yum install openssl openssl-develwget https://curl.haxx.se/download/curl-7.63.0.tar.gztar -zvxf curl-7.63.0.tar.gzcd curl-7.63.0./configure --prefix=......

colin_86
22分钟前
2
0
Canvas之使用图片

canvas有比较强的图片操作能力。可以用于动态的图像合成或者作为图形的背景。浏览器支持任意格式如PNG、GIF、或者JPEG,你甚至可以将同一个页面中的其他canvas元素生成的图片作为图片源(toDa...

tianyawhl
24分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部