论坛首页 Java企业应用论坛

StringTokenizer,洗洗睡吧

浏览 22287 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-09-20  
弱弱的问句 如果需要分隔符也输出的话 用什么来替代StringTokenizer 更好
比如字符串"11;22;33"分割符为";" 希望输出的结果是"11 ; 22 ; 33"
0 请登录后投票
   发表时间:2009-09-20  
StringTokenizer .. sun喊你回家吃饭
StringTokenizer, 你妈妈喊你回家吃饭

0 请登录后投票
   发表时间:2009-09-20  
刚买了本书,《java 软件结构与数据结构》(第三版) 最新的哦
栈的实现中就是用这个类举了个例子。
0 请登录后投票
   发表时间:2009-09-20  
巩固下基础,过时的方法,很少用到。
不错,难得有心写下来,良好一票,哈哈。
0 请登录后投票
   发表时间:2009-09-21  
那个东西,洗洗睡吧,用下面的这两个多方便……
http://commons.apache.org/lang//api/org/apache/commons/lang/StringUtils.html#split(java.lang.String)
http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Splitter.html
0 请登录后投票
   发表时间:2009-09-21  
blackartanan 写道
弱弱的问句 如果需要分隔符也输出的话 用什么来替代StringTokenizer 更好
比如字符串"11;22;33"分割符为";" 希望输出的结果是"11 ; 22 ; 33"

那就没必要分割了嘛...
或是自己再做一个字符串处理
0 请登录后投票
   发表时间:2009-09-21  
上面有个同学说遇到这样一个问题,那天我也回复说,确实是这样
humaeks 写道
我没记错的话ST遇到"|" 作为字段分隔符会死。

觉得怪怪的,早上看了下String的split的实现。
    public String[] split(String regex, int limit) {
       return Pattern.compile(regex).split(this, limit);
    }

原来是调用Pattern来实现的。所以应该比Pattern要稍慢一些。正如上面测试结果显示的那样。
又看了下Pattern的实现,里面用到了Matcher(处理正则表达式的),然后我就想,| 不可能出不来啊。

那天yuan来提醒我说,是不是我测试时将 | 直接写成了 |,忽略了它在正则表达式中是一个关键字啊,但我并没有,我写的是\\|。今天回头一看,我狂晕,将测试代码写错了。
写成了这样
        String input = "This|is|just|a|test";
        StringTokenizer st = new StringTokenizer(input,"|");
	while(st.hasMoreTokens()){
		String s = st.nextToken();
	}
        Pattern pattern = Pattern.compile("\\|");
	String [] str = pattern.split(input);
	for(int i=0;i<str.length;i++){
		String s = str[i];
	}

我说怎么输不出东西呢。囧。
改过来以后,是没有问题的。
StringTokenizer里因为是不能用正则表达式的,所以输入|就可以
而String的split方法,因为是用正则表达式实现效果,所以写的时候,必须用转义符号 \\|.
0 请登录后投票
   发表时间:2009-09-21  
kaka2008 写道
上面有个同学说遇到这样一个问题,那天我也回复说,确实是这样
humaeks 写道
我没记错的话ST遇到"|" 作为字段分隔符会死。

觉得怪怪的,早上看了下String的split的实现。
    public String[] split(String regex, int limit) {
       return Pattern.compile(regex).split(this, limit);
    }

原来是调用Pattern来实现的。所以应该比Pattern要稍慢一些。正如上面测试结果显示的那样。
又看了下Pattern的实现,里面用到了Matcher(处理正则表达式的),然后我就想,| 不可能出不来啊。

那天yuan来提醒我说,是不是我测试时将 | 直接写成了 |,忽略了它在正则表达式中是一个关键字啊,但我并没有,我写的是\\|。今天回头一看,我狂晕,将测试代码写错了。
写成了这样
        String input = "This|is|just|a|test";
        StringTokenizer st = new StringTokenizer(input,"|");
	while(st.hasMoreTokens()){
		String s = st.nextToken();
	}
        Pattern pattern = Pattern.compile("\\|");
	String [] str = pattern.split(input);
	for(int i=0;i<str.length;i++){
		String s = str[i];
	}

我说怎么输不出东西呢。囧。
改过来以后,是没有问题的。
StringTokenizer里因为是不能用正则表达式的,所以输入|就可以
而String的split方法,因为是用正则表达式实现效果,所以写的时候,必须用转义符号 \\|.

如果是java me的话,st足够了。
0 请登录后投票
   发表时间:2009-09-22  
写的不错。
0 请登录后投票
   发表时间:2009-09-22  
不错,不错~这个性能问题还真没太注意啊!不错!!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics