在前几节我们学习了怎祥使用String类的split()方法分解字符串,这一节我们将学习怎样使用StringTokenizer对象分解字符串,与split()方法不同的是,StringTokenizer对象不使用正则表达式作为分隔标记。
首先我们需要知道一个概念——语言符号,所谓的语言符号,就是指我们分析字符串时,将字符串分解成可以被独立使用的单词,而这些单词就被称作语言符号。
例如,对于字符串You are welcome,如果把空格作为该字符串的分隔标记,那么该字符串有三个单词,也就是有三个语言符号。而对于字符串You,are,welcome,如果把逗号作为该字符串的分隔标记,那么该字符串也有三个语言符号。
当我们分析一个字符串并将字符串分解成可被独立使用的单词时,可以使用java.util包中的StringTokenizer类,该类有两个常用的构造方法:
为字符串s构造一个分析器,使用默认的分隔标记,即空格符(若干个空格被看做一个空格)、换行符、回车符、Tab符、进纸符做分隔标记。
为字符串s构造一个分析器,参数delim中的字符被作为分隔标记。
注意:分隔标记的任意组合仍然是分隔标记。
例如:
StringTokenizerfenxi=newStringTokenizer(youarewelcome);StringTokenizerfenxi=newStringTokenizer(you,are;welcome,,;);
称一个StringTokenizer对象为一个字符串分析器,一个分析器可以使用nextToken()方法逐个获取字符串中的语言符号,每当调用nextToken()时,都将在字符串中获得下一个语言符号,每当获取到一个语言符号,字符串分析器中负责计数的变量的值就自动减1,该计数变量的初始值等于字符串中的单词数目。
通常用while循环来逐个获取语言符号,为了控制循环,可以使用StringTokenizer类中的hasMoreTokens()方法,只要字符串中还有语言符号,即计数变量的值大于0,该方法就返回true,否则返回false。另外还可以随时让分析器调用countTokens()方法得到分析器中计数变量的值。
例如:
importjava.util.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Strings=welcometodotcpp(thankyou),nicetomeetyou;StringTokenizerfenxi=newStringTokenizer(s,(),);intnumber=fenxi.countTokens();while(fenxi.hasMoreTokens()){Stringstr=fenxi.nextToken();System.out.print(str+);}System.out.println(共有单词:+number+个);}}
运行结果如下:
welcometodotcppthankyounicetomeetyou共有单词:9个