StringTokenizer类与String.split()的区别
Posted jingpeng77
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StringTokenizer类与String.split()的区别相关的知识,希望对你有一定的参考价值。
一、StringTokenizer:字符串分隔解析类型
属于:java.util包。
1、构造函数。
1. StringTokenizer(String str) :构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘ ’)”、“换行符(‘
’)”、“回车符(‘
’)”。
2. StringTokenizer(String str, String delim) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。
2、方法。
说明:
1. 所有方法均为public;
2. 书写格式:[修饰符] <返回类型> <方法名([参数列表])>
如:
static int parseInt(String s) 表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
1. int countTokens() :返回nextToken方法被调用的次数。如果采用构造函数1和2,返回的就是分隔符数量(例2)。
2. boolean hasMoreTokens() :返回是否还有分隔符。
3. boolean hasMoreElements() :结果同2。
4. String nextToken() :返回从当前位置到下一个分隔符的字符串。
5. Object nextElement() :结果同4。
6. String nextToken(String delim) :与4类似,以指定的分隔符返回结果。
二、split 与 StringTokenizer 的小小区别
import java.util.StringTokenizer;
public class StringTokenizerDemo
{
public static void main(String args[])
{
String str="100|66,55:200|567,90:102|43,54";
String abc="A|B|C|D";
StringTokenizer strToke=new StringTokenizer(str,":");//默认不打印分隔符
//StringTokenizer strToke=new StringTokenizer(str,":",true);//打印分隔符
//StringTokenizer strToke=new StringTokenizer(str,":",false);//不打印分隔符
int size=strToke.countTokens();//3 & 5
System.out.println("strToke count = "+size);
while(strToke.hasMoreElements())
{
System.out.println(strToke.nextToken());
//System.out.println(strToke.nextElement()); //效果同上
}
//String[] str_abc=str.split("\|");//结果与StringTokenizer一样
String[] str_abc=str.split("|");//得到不同的结果
for(int i=0;i<str_abc.length;i++)
{
System.out.println(str_abc[i]);
}
}
}
以上代码说明:同样是分割字符串,对于String.split()方法来说,
直接传入参数"|"不能正确的分割字符串,需先对它进行转义。
而对于StringTokenizer类来说,就没有这个必要。
同样的操作在遇到下列分割符时同样需要:
"+"、"*"、"$"、""。
具体原因看第三节。
三、为什么不鼓励使用StringTokenizer。
首先在JAVA 5,6,7中,它不是deprecated的。
从javadoc上看到:
StringTokenizer的是一个被保留,是因为兼容性的原因,不鼓励使用在新的代码中。建议任何人都寻求这种功能使用split或java.util.regex包。
如果你把split和StringTokenizer作比较,区别的String.Split()使用正则表达式,而StringTokenizer的只是使用逐字分裂的字符。(这是第二节出现结果的原因。)所以,如果我想更复杂的逻辑比单个字符(如 r n分割)来标记一个字符串,可以不使用StringTokenizer,而用String.Split() 。
以上是关于StringTokenizer类与String.split()的区别的主要内容,如果未能解决你的问题,请参考以下文章