• review12


    使用StringTokenizer对象分解字符串,和split()不同的是,StringTokenizer对象不使用正则表达式作为分隔标记。

    当Fenix一个字符串并将字符串分解成可被独立使用的单词时,就可以使用StringTokenizer类,该类有两个构造方法。

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

    StringTokenizer(String s, String delim):为字符串s构造一个分析器。参数delim中的字符被作为分隔标记。分隔标记的任意组合仍然是分隔标记。

    称一个StringTokenizer对象为一个字符串分析器,一个分析器可以使用nextToken()方法逐个获取字符串中的语言符号(单词),每当调用nextToken()时,都将在字符串中获得下一个语言符号,每当获取一个语言符号,字符串分析器中负责计数的变量的值就自动减1,。为了控制获取字符串的循环,要用到该类的hasMoreTokens()方法,只要字符串中还有语言符号,计数变量的值就大于0,该方法返回true,否则返回false。

    StringTokenizer对象的使用情况如下所示:

    import java.util.StringTokenizer;
    
    public class Test07 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String s = "you are welcome(thank you), nice to meet you";
            StringTokenizer fenxi = new StringTokenizer(s, "() ,");
            System.out.println("该句子单词共有:" + fenxi.countTokens() + "个");
            while(fenxi.hasMoreTokens())
            {
                String str = fenxi.nextToken();
                System.out.println(str);
            }
        }
    }

    运行结果如下所示:

    使用Scanner类从字符串中解析出程序所需要的数据

    1.在默认情况下,Scanner对象将空格作为分隔标记来解析字符串中的单词,解析操作的特点如下:

    Scanner对象调用next()方法一次返回字符串中的单词,如果字符串中最后一个单词已被next()方法返回,Scanner调用hasnext()将返回true,否则返回false。

    对于被解析的字符串中的数字型单词,比如618,168.98,等,Scanner可以用nextInt()或nextDouble()方法来代替next()方法,将数字型单词转化为int或double数据返回。

    如果单词不是数字型单词,Scanner调用nextInt()或nextDouble()方法将发生InputMismatchException异常。代码展示情况如下所示:

    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class Test08 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String cost = " TV cost 876 dollar. Computer cost 2398 dollar.";
    		Scanner reader = new Scanner(cost);//默认以空格作为分隔标记
    		double sum = 0;
    		while(reader.hasNext())
    		{
    			try{
    				double price = reader.nextDouble();
    				sum += price;
    			}
    			catch(InputMismatchException exp)
    			{
    				System.out.println(reader.next());
    			}
    		}
    		System.out.println("总计sum=" + sum);
    	}
    }
    

     运行结果如下所示:

    2.使用正则表达式作为分隔标记解析字符串,Scanner对象可以调用userDelimiter(String regex)方法,代码展示如下所示:

    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class Test09 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String cost = "话费清单:市话费76.89元, 长度话费167.38元, 短信费12.68元";
            Scanner reader = new Scanner(cost);
            reader.useDelimiter("[^1234567890.]+");
            double sum = 0;
            while(reader.hasNext())
            {
                try{
                    double price = reader.nextDouble();
                    sum += price;
                }
                catch(InputMismatchException exp)
                {
                    System.out.println(reader.next());
                }
            }
            System.out.println("sum=" + sum);
        }
    
    }

    运行结果如下所示:

    因为是以非数字为分隔符,所以reader中存储的就是数字。所以语句System.out.println(reader.next());没有任何输出。

  • 相关阅读:
    论频谱中负频率成分的物理意义(转载)
    VS2008的glaux库
    通过域名显示IP列表
    Shader errorX3205的解决
    Curl, Divergence, Circulation
    关于FIONREAD命令的作用
    Cairngorm的结构及开发使用(2)(转)
    结合Flex Builder和Flash CS4制作一个中国地图的应用(转)
    大型高并发高负载网站的系统架构(转)
    Cairngorm的结构及开发使用(4)(转)
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9265308.html
Copyright © 2020-2023  润新知