前几天看一个老帖子
http://www.iteye.com/topic/7279?page=2
其中凤舞凰扬前辈说到了StringTokenizer。
之前没接触过StringTokenizer,看上去类名很长,仿佛很牛13似的。最近了解了一下
引用
StringTokenizer 类允许应用程序将字符串分解为标记
也就是分解字符串用的
让我们来看一个简单的例子
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
出去结果如下
this
is
a
test
这种不带参数的StringTokenizer使用的分隔符是\t\n\r\f,即空白字符、制表符、换行符、回车符和换页符。
ok,StringTokenizer还提供了另一种构造方法,StringTokenizer(String str, String delim)
从名字上看,可以知道,我们可以自定义delimiter。那么,这个delimiter是不是可以为正则表达式呢?满怀期待的试验一下
String input = "This is just a test";
//设想的delimiter可以为正则表达式
StringTokenizer st = new StringTokenizer(input,"\\s{1}");
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
本以为结果会是
this
is
a
test
哪知一看,结果为
Thi
i
ju
t a te
t
可见,StringTokenizer的delimeter不可以为正则表达式
替代方法?
首先,来看String的split方法
String input = "This is just a test";
String [] str = input.split("\\s{1}");
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
输出结果为
this
is
a
test
ok,正确。String的split方法接受的参数可以为正则表达式。
我们可以看一下split方法的定义
public String[] split(String regex) {
return split(regex, 0);
}
其实这个参数他们就是按正则表达式来对待的。(哎,我一直以为只能是字符呢
)
接着来看Scanner的表现。
引用
一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器
Scanner scanner = new Scanner(input);
scanner.useDelimiter("\\s{1}");
while(scanner.hasNext()){
System.out.println(scanner.next());
}
同样的,通过设置Delimiter(可以为正则表达式),我们可以很轻松的拆分字符串
输出结果为
This
is
just
a
test
另外,还可以使用Pattern类的split方法,我觉得这个和String的split方法差不多。(Pattern类主要不是用在拆分字符串,而是在正则表达式的应用那里)
Pattern pattern = Pattern.compile("\\s{1}");
str = pattern.split(input);
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
结果同样为
This
is
just
a
test
好了,现在已经知道的就有三种方式来代替StringTokenizer了,并且由于StringTokenizer只能做一些很简单的拆分,远不能适应现在的要求,所以,StringTokenizer,你可以放心的撤退了,远离历史舞台吧。
其实sun也知道这个
sun 写道
<tt>StringTokenizer</tt> is a legacy class that is retained for
* compatibility reasons although its use is discouraged in new code. It is
* recommended that anyone seeking this functionality use the <tt>split</tt>
* method of <tt>String</tt> or the java.util.regex package instead.
ps:那个老帖子是04年的。也许那会还没有这么多的替代方法。
不过5年过去了。StringTokenizer就不要再用了。
StringTokenizer,洗洗睡吧。
分享到:
相关推荐
import java.util.StringTokenizer; /** * * @author lushuaiyin * */ public class StringTokenizerTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated...
看过c#的split regex等,还是有时候会需要像java StringTokenizer 一样的功能,所以转载一个
StringTokenizer的用法
用delphi实现java的StringTokenizer类的功能。在原来曾青松版本的基础上修复bug完成的。
StringTokenizer tool class
本段代码 用于测试StringTokenizer用法/** * 测试StringTokenizer,继承Enumeration; * @author DELL */
下面小编就为大家带来一篇基于Java中的StringTokenizer类详解(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Write a program called StringTokenizer1.java that accepts a string, looks for commas within the string, and breaks the string up into the parts separated by the comma. For example, the string ...
主要介绍了JAVA StringBuffer类与StringTokenizer类代码解析,具有一定借鉴价值,需要的朋友可以参考下
StringTokenizer 马克-to-win java视频 字符串解析器
StringTokenizer 马克-to-win java视频 字符串解析器
Java 实例 - 字符串分隔(StringTokenizer)源代码-详细教程.zip
java文档String和StringTokenizer 马克-to-win java视频 字符串解析器
Java-StringTokenizer1 这个文件解释了 StringTokenizer 的工作。
编写一个程序,输入一行文本,采用StringTokenizer类的对象,将文本符号化,并以逆序输出语言符号。
java常用类的使用方法
Arduino-StringTokenizer-库一个非常简单的arduino库,可以使用Java(如string-tokenizer函数)来使用定界符分割字符串。 基本说明: 参数:用于标记化的字符串; 分隔符字符串职能 : (boolean)hasNext()-如果...
StringTokenizer类的使用方法
StringTokenizer commaToker = new StringTokenizer(source,","); String[] result = new String[commaToker.countTokens()]; int i=0; while(commaToker.hasMoreTokens()){ result[i] = commaToker.nextToken...
StringTokenizer tokenizer = new StringTokenizer(str, "0123456789."); List<String> ops = new ArrayList(); while (tokenizer.hasMoreElements()) { String string = tokenizer.nextToken(); ops....