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的更多相关文章
随机推荐
- JS和C# 里的闭包及闭包在事件中的使用
在Javascript世界里,无所不用闭包及自定义事件, 自定义事件其实也是事先定义好一种规则 ,当触发者被响应后执行的一段回调.下面看个例子 function dothing(callBack){ ...
- iOS 成员变量和属性的区别
一. 成员变量 1.成员变量的作用范围: @public:在任何地方都能直接访问对象的成员变量 @private:只能在当前类的对象方法中直接访问,如果子类要访问需要调用父类的get/set方法 @p ...
- JavaScript正则中\1\2的作用
一.示例 1. 验证6个相同的数字 var reg = new RegExp(/^(\d)\1{5}/g); var a = '333333'; if(reg.test(a)) { alert('ri ...
- Qt for Android 启动短暂的黑屏或白屏问题如何解决?
解决方法一: 使用透明主题 点击项目 -> 在 构建设置 里面找到 Build Android APK 栏目,点击 create templates 创建一个 AndroidManifest.x ...
- rgba透明的兼容处理
background-color: rgba(0, 0, 0, .6);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr ...
- app开发学习需要经历哪些流程
app开发学习需要经历哪些流程?如何零基础入门app开发?以下是知乎热心开发者的经验总结,对学习app开发有很好的参考意义 1.如果没有编程基础的,学习基础知识的过程肯定是必须的.2.有了一些基础 ...
- Dockerfile学习(一)
FROM指令: 格式为:FROM<image>:<tag>或者FROM<image> Dockerfile的第一条指令必须是FROM,用来指定要制作的镜像继承自哪个 ...
- 第一次java小考心得体会
本周四Java第一次上课,测试了一个ATM程序,从两点半开始到五点半结束. 整整三个小时,结果怎么说呢,大概可以用惨不忍睹来形容吧. 因为之前有一个测试样卷,以为考试内容不会变的我,只是把学生信息管理 ...
- python基础知识——包
包是一种通过使用“模块名”来组织python模块的名称空间的方式. 无论是import形式还是from...import形式,凡是在导入语句中(不是在使用时)遇到带点的,就需要意识到——这是包. 包是 ...
- myql命令
ALTER TABLE 表名 DROP COLUMN 列名#删除某一列