java 方法 StringTokenizer
一、说在前面
之前需要使用字符串处理的时候使用的都是split方法,今天通过学习又掌握了一个新的字符串处理方法StringTokenizer,接下来就来总结一下这两种方法的不同和优缺点。
二、具体语法
StringTokenizer
StringTokenizer 构造方法: 1. StringTokenizer(String str) :构造一个用来解析 str 的 StringTokenizer 对象。java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。 2. StringTokenizer(String str, String delim) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符。 3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。 StringTokenizer 常用方法: 1. int countTokens():返回nextToken方法被调用的次数。 2. boolean hasMoreTokens():返回是否还有分隔符。 3. boolean hasMoreElements():判断枚举 (Enumeration) 对象中是否还有数据。 4. String nextToken():返回从当前位置到下一个分隔符的字符串。 5. Object nextElement():返回枚举 (Enumeration) 对象的下一个元素。 6. String nextToken(String delim):与 4 类似,以指定的分隔符返回结果。
Split
java.lang.string.split split方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 stringObj.split([separator,[limit]]) stringObj 必选项。 要被分解的 String 对象或文字,该对象不会被split方法修改。 separator 可选项。字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。 limit 可选项。该值用来限制返回数组中的元素个数(也就是最多分割成几个数组元素,只有为正数时有影响) split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。 separator不作为任何数组元素的部分返回。
三、比较
以下内容借鉴于博客https://www.cnblogs.com/jingpeng77/p/9941709.html
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]); } } }
输出结果:
为什么会出现这样的结果,如果按照“|”分隔的话,split的输出应该和stringtokenizer没有差别,原因就是同样是分割字符串,对于String.split()方法来说,直接传入参数"|"不能正确的分割字符串,需先对它进行转义,也就是输入“\\|”。
从javadoc上看到:StringTokenizer的是一个被保留,是因为兼容性的原因,不鼓励使用在新的代码中。但是又有实验表明StringTokenizer 性能更高些,所以两个还是都要灵活掌握,针对于更多的字符串,还是建议使用StringTokenizer来处理。