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());没有任何输出。
review12的更多相关文章
随机推荐
- 在一台服务器上搭建多个网站的方法(Apache版)
Apache的配置文件一般放置在/etc/httpd/conf文件夹下,httpd.conf是它的主配置文件,在进行配置时可以将虚拟主机的配置文件单独配置,如取名为vhost.conf,然后再http ...
- tfboys——tensorflow模块学习(四)
tensorflow功能函数 tf.abs 计算张量的绝对值 abs ( x , name = None ) 定义在:tensorflow/python/ops/math_ops.py. 参考指南:数 ...
- vue-cli 搭建项目
1.cnpm install -g vue-cli 2.vue -V(注意大写,查vue版本) 3.vue init webpack vue1(创建vue1目录) 4.cd vue1(定位到目录中) ...
- 【转】Python爬虫_示例2
爬虫项目:爬取并筛选拉钩网职位信息自动提交简历 一 目标站点分析 #一:实验前准备: 浏览器用Chrome 用Ctrl+Shift+Delete清除浏览器缓存的Cookie 打开network准备 ...
- Centos配置sftp
sftp配置: ssh -V 使用ssh –V命令来查看openssh的版本,版本必须大于4.8p1,低于这个版本需要升级. 1.添加用户及用户组: groupadd sftp useradd -g ...
- c# 泛型(Generic)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 泛型 { ...
- 1000M链路的理论值计算
1000M约等于(1秒/(1纳秒))/ (1024*1024) ============================================================== 1.什么是 ...
- eclipse修改项目默认编码为UTF-8
1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧 Text file encodin ...
- 在.h和.cpp中包含头文件的区别
1.在.h中包含头文件,是为了声明一系列这个头文件的变量等,可能会产生重复包含的问题: 2.在.cpp中包含头文件只是为了实现这个头文件或者使用其中的方法,不会有重复包含的问题,所以尽量在源文件中包含 ...
- JSP JavaBeans
Javabean的设计原则 公有类 无参公有构造方法 私有属性 getter和setter方法 在Jsp页面中如何使用Javabeans? 像使用普通Java类一样,创建JavaBeans实例. 在J ...