在前几节我们学习了怎祥使用String类的split()方法分解字符串,这一节我们将学习怎样使用StringTokenizer对象分解字符串,与split()方法不同的是,StringTokenizer对象不使用正则表达式作为分隔标记。


首先我们需要知道一个概念——语言符号,所谓的语言符号,就是指我们分析字符串时,将字符串分解成可以被独立使用的单词,而这些单词就被称作语言符号。


例如,对于字符串"You are welcome",如果把空格作为该字符串的分隔标记,那么该字符串有三个单词,也就是有三个语言符号。而对于字符串"You,are,welcome",如果把逗号作为该字符串的分隔标记,那么该字符串也有三个语言符号。


当我们分析一个字符串并将字符串分解成可被独立使用的单词时,可以使用java.util包中的StringTokenizer类,该类有两个常用的构造方法:

(1) StringTokenizer(String s)

为字符串s构造一个分析器,使用默认的分隔标记,即空格符(若干个空格被看做一个空格)、换行符、回车符、Tab符、进纸符做分隔标记。

(2) StringTokenizer(String s,String delim)

为字符串s构造一个分析器,参数delim中的字符被作为分隔标记。


注意:分隔标记的任意组合仍然是分隔标记。


例如:

StringTokenizer fenxi = new StringTokenizer("you are welcome");
StringTokenizer fenxi = new StringTokenizer("you,are; welcome",", ;");


称一个StringTokenizer对象为一个字符串分析器,一个分析器可以使用nextToken()方法逐个获取字符串中的语言符号,每当调用nextToken()时,都将在字符串中获得下一个语言符号,每当获取到一个语言符号,字符串分析器中负责计数的变量的值就自动减1,该计数变量的初始值等于字符串中的单词数目。


通常用while循环来逐个获取语言符号,为了控制循环,可以使用StringTokenizer类中的hasMoreTokens()方法,只要字符串中还有语言符号,即计数变量的值大于0,该方法就返回true,否则返回false。另外还可以随时让分析器调用countTokens()方法得到分析器中计数变量的值。


例如:

import java.util.*;
public class Main {
    public static void main(String args[]) {
        String s = "welcome to dotcpp(thank you),nice to meet you";
        StringTokenizer fenxi = new StringTokenizer(s,"() ,");
        int number = fenxi.countTokens();
        while(fenxi.hasMoreTokens()) {
            String str = fenxi.nextToken();
            System.out.print(str+" ");
        }
        System.out.println("共有单词:"+number+"个");
    }
}


运行结果如下:

welcome to dotcpp thank you nice to meet you 共有单词:9个


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)