之前没接触过StringTokenizer,看上去类名很长,仿佛很牛13似的。最近了解了一下
也就是分解字符串用的
让我们来看一个简单的例子
出去结果如下
这种不带参数的StringTokenizer使用的分隔符是/t/n/r/f,即空白字符、制表符、换行符、回车符和换页符。
ok,StringTokenizer还提供了另一种构造方法,StringTokenizer(String str, String delim)
从名字上看,可以知道,我们可以自定义delimiter。那么,这个delimiter是不是可以为正则表达式呢?满怀期待的试验一下
本以为结果会是
哪知一看,结果为
可见,StringTokenizer的delimeter不可以为正则表达式
替代方法?
首先,来看String的split方法
输出结果为
ok,正确。String的split方法接受的参数可以为正则表达式。
我们可以看一下split方法的定义
其实这个参数他们就是按正则表达式来对待的。(哎,我一直以为只能是字符呢 )
接着来看Scanner的表现。
同样的,通过设置Delimiter(可以为正则表达式),我们可以很轻松的拆分字符串
输出结果为
另外,还可以使用Pattern类的split方法,我觉得这个和String的split方法差不多。(Pattern类主要不是用在拆分字符串,而是在正则表达式的应用那里)
结果同样为
好了,现在已经知道的就有三种方式来代替StringTokenizer了,并且由于StringTokenizer只能做一些很简单的拆分,远不能适应现在的要求,所以,StringTokenizer,你可以放心的撤退了,远离历史舞台吧。
其实sun也知道这个
ps:那个老帖子是04年的。也许那会还没有这么多的替代方法。
不过5年过去了。StringTokenizer就不要再用了。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
我简单的测试了下。的确是它最快。
不知道我的测试结果科学不科学,请指教
////////////////////////////////////////////////////////////////////
运行了五次。输出结果如下:
StringTokenizer最快
Scanner最慢。
String和Pattern速度差不多。Pattern稍快些。
////////////////////////////////////////////////////////////////
循环外面。
只用一个Pattern
然后当成参数传进去。这就是dennis_zane大哥说的缓存吧。
明白?
刚试了下,确实是这样的。
不知道为什么。有空了看下源代码