Java常用实用类/StringTokenizer类/Scanner类

StringTokenizer类

首先要知道Tokenizer是分词器的意思,所以它的作用是将StringTokenizer类的对象的字符序列进行分解

StringTokenizer类有两个构造方法

  1. StringTokenizer(String s) //构造一个StringTokenizer对象,名称自定,例如fenxi,磨人的分隔标记(空格,换行,回车,tab)
StringTokenizer fenxi = new StringTokenizer("how are you");
  1. StrintTokenizer(String s,String delim) //delim就是自定义的分隔标记
StringTokenizer fenxi = new StringTokenizer("how are,you",",");

需要注意的是任意排列的仍然还是分隔标记

通过对象调用StringTokenizer类中的方法

  • String nextToken() //返回其对象获取到的单词,每获取一次就自动删除单词
  • boolean hasMoreToken() //返回一个布尔值,只有对象中还有单词就为true
  • countTokens() //返回对象拥有多少个单词的值

例子

import java.util.StringTokenizer;

public class Example9_11 {
    public static void main(String[] args) {
        String s = "we are student ,and";   //创建一个字符串变量
        StringTokenizer fenxi = new StringTokenizer(s," ,");    //定义的分隔标志是空格或逗号
        int number = fenxi.countTokens();
        while(fenxi.hasMoreTokens()){   //循环
            System.out.println(fenxi.nextToken());  //获取单词
            System.out.println("还剩"+fenxi.countTokens()+"单词");
        }
        System.out.println("一共有"+number+"个单词");
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava TextCourse.Example9_11
we
还剩3单词
are
还剩2单词
student
还剩1单词
and
还剩0单词
一共有4个单词

通过对收费单据进行分割的例子

import java.util.StringTokenizer;

public class Example9_11 {
    public static void main(String[] args) {
        String s = "市话费:28.89,长途话费:128.84,上网费:1144";   //创建一个字符串变量
        String regex = "[^0-9.]+";   //声明一个正则表达式(意思是除了0-9的数字和.)
        s = s.replaceAll(regex,"#");  //将原先的字符串进行修改为#号
        StringTokenizer fenxi = new StringTokenizer(s,"#"); //分隔开用#号的数字
        double totalMoney = 0;  //声明一个总价格
        while(fenxi.hasMoreTokens()){
            double money = Double.parseDouble(fenxi.nextToken());   //将分隔的单词转换成double再赋值
            System.out.println(money);
            totalMoney = totalMoney+money;
        }
        System.out.println("总费用是:"+totalMoney);
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava TextCourse.Example9_11
28.89
128.84
1144.0
总费用是:1301.73

Scanner类

怎样使用Scanner类的对象从字符序列中解析程序所需要的的数据
创建Scanner对象之前首先要给它一个String对象

        String s = "市话费:28.89,长途话费:128.84,上网费:1144";
        Scanner scanner = new Scanner(s);

scanner默认使用空格作为分隔标记来解析s的字符序列,也可以让对象使用useDelimiter(正则表达式)自定义分隔标记
(delimiter是定界符的意思)

Scanner对象方法

  • next() //返回对象的字符序列中的单词
  • nextDouble() //将数字型字符转化为double数据类型
  • hasNext() //能扫描到的单词返回ture,如果没有得返回就返回false
  • hasNextDouble() //同上,只是更具体为double类型

通过简单例子

import java.util.Scanner;

public class example9_13 {
    public static void main(String[] args) {
        String s = "市话费:28.89,长途话费:128.84,上网费:1144";
        Scanner scanner = new Scanner(s);
        scanner.useDelimiter("[^0-9.]+");   //表示使用定界符方法(除了0~9和.出现一次或多次)
        double sum = 0;
        while(scanner.hasNext()){
            try{ double price = scanner.nextDouble();
                sum = sum + price;
                System.out.println(price);
            }
            catch (Exception e){
                String t = scanner.next();  //出现异常就将异常赋值出去
            }
        }
        System.out.println("总费用:" + sum);
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava TextCourse.example9_13
28.89
128.84
1144.0
总费用:1301.73

StringTokenizer类和Scanner类的区别

  1. 两个类都可以用于分解字符序列中的单词,但思想上有所不同
  2. StringTokenizer类是将分解出的单词全部放到其对象的实体中,因此能更快速获取得单词,但就占用的内存多了
  3. Scanner类是将怎样分解单词的规则放到其对象的实体中,因此比较慢,但占用的内存会很少
  4. StringTokenizer类对象一旦诞生就可以调用countToken()返回有多少个单词
  5. 而Scanner类只能通过逐个获取并记录

CET4P152

ridiculous
divorce
commerce
scholarship
headquarters

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值