Scanner类和StringTokenizer类解析字符序列中的单词
定义:从字符串中通过设置的分隔标记将单词分隔开并获得这些单词,可以结合正则表达式使用(链接: Java中的正则表达式及相关知识(零基础学习))
1.StringTokenizer类
构造方法
StringTokenizer(String s)
:为s构造一个分析器,使用默认的分隔标记,即空格符、换行、回车符、制表符、进纸符做分隔标记。StringTokenizer(String s,String delim)
:为s构造一个分析器。参数delim的字符序列中的字符的任意排列被作为分隔标记。
StringTokenizer对象是一个字符序列分析器,分析器中封装的数据是若干个单词。可以使用String nextToken()逐个获取分析器中的单词。每当nextToken()返回一个单词,分析器就会删除该单词。
- 可以用hasMoreTokens()方法来确定分析器中是否还有单词
- 可以用countTokens()方法返回当前分析器中单词的个数
2.Scanner类
Scanner对象解析字符序列中的单词
过程
//String对象
String NBA=“I Love This Game”;
//构造Scanner对象
Scanner scanner=new Scanner(NBA);
//调用方法将单词用正则表达式进行分隔
useDelimiter(正则表达式) //不用指定分隔标记,Scanner对象默认用空白字符(空格、制表符、换行符)作为分隔标记来解析String对象的字符序列中的单词。
//返回解析出来的单词
- Scanner对象调用next()方法依次返回被解析出来的单词;
- 如果最后一个单词被next()返回,Scanner对象调用hasNext()将返回false,否则返回true
- 对于数字型单词,如:23、1.2,Scanner对象可以用nextInt()或nextDouble()代替next();如果下一个单词不是数字,即便第二个单词是数字,nextInt()和nextDouble()将发生InputMismatchException异常
3.StringTokenizer和Scanner的区别
- StringTokenizer类把分解出的全部单词都存放在StringTokenizer对象的实体中,因此StringTokenizer对象获得单词速度更快,但是实体占用内存更多。Scanner类不在实体中存放单词,仅存放怎样获取单词的分隔标记,因此占用内存小,速度慢。
- StringTokenizer对象一旦产生就立刻确定单词的数目,即可以用countTokens()方法返回单词的数目;而Scanner类没把单词存放在实体中,无法提供获取获取单词数量的方法。