文档章节

StringTokenizer和Split性能比较

l
 lzg14
发布于 2014/06/03 17:12
字数 264
阅读 8986
收藏 6
点赞 0
评论 8

朋友问我的问题,网上搜了下,都说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是顺序一个个的来处理
java字符串分割性能比较

关于字符串的分割,我用jdk的split、apache的common的split、正则表达式、StringTokenizerr以及substring做了以下比较,比较的时间为纳秒,用一个字符串“192.168.20.121”作为示例, 打印时...

凯文加内特 ⋅ 2014/06/03 ⋅ 2

String 的 split、subString,外加StringTokenizer之性能比较

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

一直在努力 ⋅ 2012/03/01 ⋅ 0

java中subString、split、stringTokenizer三种截取字符串方法的性能比较

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

candies ⋅ 2014/02/28 ⋅ 0

String的substring、split,外加StringTokenizer三者截取字符串...

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

一堆BUG ⋅ 2012/02/27 ⋅ 2

Java 程序优化:字符串操作、基本运算方法等优化策略(一)

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

Mysoft ⋅ 2015/09/25 ⋅ 0

开发JAVA编程中字符串分割的两种方法

方法1:采用String的split,验证代码如下:   import java.util.Arrays;   public class TestSplit {   public static void main(String[] args) {   String orignString = new String......

序写人生 ⋅ 2010/06/14 ⋅ 0

StringTokenizer(字符串分隔解析类型) java.util.StringTokeniz

功效:将字符串以定界符为界,分析为一个个的token(可理解为单词),定界符可以自己指定。 构造函数。 StringTokenizer(String str) :构造一个用来解析str的StringTokenizer对象。java默认的...

SZL ⋅ 2014/03/22 ⋅ 0

StringTokenizer类的使用

StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数。 1.构造函数 public StringTokenizer(String str) public StringTokenizer(String str, String delim) public StringT......

木子木 ⋅ 2014/03/27 ⋅ 0

关于字符串的分隔 - String的spit 和StringTokenizer

public static void main(String[] args){String s1 = "this,is,,,,empty,,,,"; StringTokenizer st = new StringTokenizer(s1,",");System.out.println("Token length :"+st.countTokens())......

黄平俊 ⋅ 2009/08/13 ⋅ 1

IT公司100题-10-翻转句子中单词的顺序

问题描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“Hello world!”,则输出“w...

关西大汉弹琵琶 ⋅ 2015/11/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

笔试题之Java基础部分【简】【一】

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他 1.length、length()和size() length针对...

anlve ⋅ 19分钟前 ⋅ 1

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 43分钟前 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 47分钟前 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 8

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部