使用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());没有任何输出。

review12的更多相关文章

随机推荐

  1. UI通过UISlider编写游戏第六感

    #import "RootViewController.h" @interface RootViewController (){    UILabel *scoreLabel; } ...

  2. Maven学习笔记【1】 -- Maven简介

    本文主要讲Maven的基础知识. 一 什么是Maven? Maven是一个项目管理工具.Maven提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档.最强大的功能就是能够自动下 ...

  3. Django报:AttributeError: tuple object has no attribute get

    def index(request): hero_list=models.HeroInfo.objects.all() return render_to_response('index.html',{ ...

  4. LeNet5

    Lecun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proc ...

  5. opencv3计算机视觉+Python(四)

    使用分水岭和GrabCut算法进行物体分割 用GrabCut算法进行图像分割 在OpenCV中,实现了grabcut分割算法,该算法可以方便的分割出前景图像,操作简单,而且分割的效果很好.算法的原理参 ...

  6. [转载]威力导演14旗舰破解版(中文简体)|取消30天限制CyberLink&nb

               2015月9月15日(当地时间),CyberLink讯连科技发布新一代视频编辑软件 — PowerDirector威力导演14,融合了上个版本发布以来的多次更新升级,威力导演依旧 ...

  7. 如何配置一个路径,能够既适合Linux平台,又适合Windows平台,可以从这个路径中读取文件

    如何配置一个路径,能够既适合Linux平台,又适合Windows平台,可以从这个路径中读取文件? 目的:就是希望在项目的配置文件中配上一样的路径,不管协作者使用的是什么平台,都能够读到文件. 比如:L ...

  8. Python操作SQLAlchemy

    Mysql环境: MySQL 一.概述什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 什么是 MySQL.Oracle.SQLite.Access.MS ...

  9. 17南宁区域赛 J - Rearrangement 【规律】

    题目链接 https://nanti.jisuanke.com/t/19976 题意 给出 一个n 然后 给出 2*n 个数 可以重新排列成两行 然后 相邻的两个数 加起来 不能被三整除 可以上下相邻 ...

  10. 小程序学习第二天 认识框架WXML

    一.初级小程序HelloWorld 心得: (1)progect.config.json :app的个性化设置 (2)一个小程序至少包括两个文件 (2.1)app.json 小程序全局配置       ...