StringTokenizer使用笔记
StringTokenizer 基本使用
笔者最近在做算数表达式的逆波兰式转换和解析,原始表达式为String类型,在使用StringTokenizer 之前笔者的解决思路是 将原始表达式->转为字符数组存储(这里将存储 表达式的字符数组记为C1),之后 再创建一个 char类型的中介数组(记为 C2),每当C1中的元素为数字时,传递给C2,直至C1中遇到运算符,那么将中介数组(C2)存储的元素通过String.valueof(char[] age)方法转换为一个字符串存入操作数栈,这样做的缺点是 在判断过程中需要不断的在char/String 两种类型之间转换,疏忽容易出现bug,而且在每次的中介数组整体转换为String类型后,还必须重新初始化中介数组,这个过程中还会出现(空指针异常),所以笔者又Google了几篇文章,发现 使用StringTokenizer 可以完美的解决此类问题(用于单词划分,以及各种 按自定义标准分割字符串)。
好了,下面来 演示StringTokenizer的用法
public class StringTokenizer_Test {
public static void main(String[] args) {
StringTokenizer stringTokenizer = new StringTokenizer("3+5*7");
while(stringTokenizer.hasMoreTokens()){
System.out.println(stringTokenizer.nextToken());
}
}
}
输出:357
这里貌似没有起到作用,那是因为StringTokenizer有三种构造方法:
1. public StringTokenizer(String str)
2. public StringTokenizer(String str, String delim)
3. public StringTokenizer(String str, String delim, boolean returnDelims)
上例 ,我们使用的 是第一种构造方法
1. StringTokenizer(String str):构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。
2. StringTokenizer(String str, String delim):构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims):构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。
好了,我们来使用另外两种方法重新测试一下:
public class StringTokenizer_Test {
public static void main(String[] args) {
StringTokenizer stringTokenizer = new StringTokenizer("3+5*7","+-*/");
while(stringTokenizer.hasMoreTokens()){
System.out.println(stringTokenizer.nextToken());
}
}
}
输出:
3
5
7
第二种种构造方法 以指定分割符 分割字符串 ,得到 其子字符串(子串不包含分隔符)
第三种方法:
public class StringTokenizer_Test {
public static void main(String[] args) {
StringTokenizer stringTokenizer = new StringTokenizer("3+5*7","+-*/",true);
while(stringTokenizer.hasMoreTokens()){
System.out.println(stringTokenizer.nextToken());
}
}
}
输出:
3
+
5
*
7
这里可以看到,相比较 第二种方法,这里的分隔符也作为子串输出
当我们的 操作数是任意 数位时 且 字符串复杂度高时,StringTokenizer 的 作用就体现出来了(以一个带括号的 运算表达式为例):
public class StringTokenizer_Test {
public static void main(String[] args) {
StringTokenizer stringTokenizer = new StringTokenizer("11+42*(24-15)","+-*/()",true);
while(stringTokenizer.hasMoreTokens()){
System.out.println(stringTokenizer.nextToken());
}
}
}
输出:
11
+
42
*
(
24
-
15
)
宾狗! 忘记有小伙伴 不知道
while(stringTokenizer.hasMoreTokens()){
7 System.out.println(stringTokenizer.nextToken());
8 }
这段代码的含义了,
这里简单介绍下:
说明:
1. 所有方法均为public;
2. 书写格式:[修饰符] <返回类型><方法名([参数列表])>
如:
static int parseInt(String s)表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。
1. int countTokens():返回nextToken方法被调用的次数。如果采用构造函数1和2,返回的就是分隔符数量(例2)。
2. boolean hasMoreTokens() :返回是否还有分隔符。
3. boolean hasMoreElements() :结果同2。
4. String nextToken():返回从当前位置到下一个分隔符的字符串。
5. Object nextElement() :结果同4。
6. String nextToken(String delim):与4类似,以指定的分隔符返回结果。
好了,关于StringTokenizer 的用法,基本的使用就这样了,有什么问题欢迎在我的评论区反应,共同进步
StringTokenizer使用笔记的更多相关文章
- Java学习笔记--StringTokenizer的使用
拓展:Pattern.split替代String.split http://www.cnblogs.com/gnivor/p/4386978.html StringTokenizer是一个用来分隔St ...
- Hadoop阅读笔记(二)——利用MapReduce求平均数和去重
前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一 ...
- Hadoop阅读笔记(一)——强大的MapReduce
前言:来园子已经有8个月了,当初入园凭着满腔热血和一脑门子冲动,给自己起了个响亮的旗号“大数据 小世界”,顿时有了种世界都是我的,世界都在我手中的赶脚.可是......时光飞逝,岁月如梭~~~随手一翻 ...
- Hadoop学习笔记(6) ——重新认识Hadoop
Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...
- 【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程
一.概要描述 shuffle是MapReduce的一个核心过程,因此没有在前面的MapReduce作业提交的过程中描述,而是单独拿出来比较详细的描述. 根据官方的流程图示如下: 本篇文章中只是想尝试从 ...
- Hadoop学习笔记2 - 第一和第二个Map Reduce程序
转载请标注原链接http://www.cnblogs.com/xczyd/p/8608906.html 在Hdfs学习笔记1 - 使用Java API访问远程hdfs集群中,我们已经可以完成了访问hd ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- Hadoop学习笔记(8) ——实战 做个倒排索引
Hadoop学习笔记(8) ——实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...
- Hadoop学习笔记(4) ——搭建开发环境及编写Hello World
Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...
随机推荐
- 分享一个低配VPS下运行的mysql配置文件
在各种内存CPU核心只有1/2核,内存只有512M/1G的vps下,内存.CPU.硬盘都不是太充裕.因此主要思路是,禁止吃内存大户innodb引擎,默认使用MyISAM.禁止吃硬盘大户log-bin, ...
- 手机自动化测试:appium源码分析之bootstrap十四
手机自动化测试:appium源码分析之bootstrap十四 poptest(www.poptest.cn)是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开 ...
- (iOS)sqlcipher和FMDB的使用总结(原创)
写这篇文章的原因是之前接触到了关于sqlite数据库加密的问题,一般数据库加密,无非是数据加密和数据库文件加密,当然数据库文件加密对手机效率可能更高一些. 下面就讲一下,自己对sqlcipher和fm ...
- JavascriptS中的各结构的嵌套和函数
各位朋友大家好,上周更新给大家分享了JavaScript的入门知识及各种常用结构的用法,那么,本次更新博主就跟大家更深入的聊一聊JS各结构的嵌套用法,及JS中及其常用的一种结构--函数.以下为函数和循 ...
- 关于String类和String[]数组的获取长度方法细节
一.在Java中,以下代码段有错误的是第( )行 public static void main(String[] args) { String name = "小新"; ...
- 什么是Actor
本文已.Net语法为主,同时写有Scala及Java实现代码 严肃的说,演员是一个广泛的概念,作为外行人我对Actor 模型的定义: Actor是一个系统中参与者的虚拟人物,Actor与Actor之间 ...
- 好看的复选框(Checkbox)效果
在线演示 源码下载
- html自定义调控
为什么需要自定义数据属性? 很多时候我们需要存储一些与不同DOM元素相关联的信息.这些信息对于读者来说可能是不需要的,但是可以轻松的访问这些信息将会给我们开发者的工作带来极大的便利. 例如,假设你有一 ...
- css3---线性渐变
.example1 { width: 150px; height: 80px; background: -moz-linear-gradient( top,#ccc,#000); background ...
- 纯JS单页面赛车游戏代码分享
分享一个以前写的小游戏,纯js游戏,代码很简单.欢迎大家来喷呦! 效果图: 代码展示://直接复制到html文件即可 支持IE9+版本 <!DOCTYPE html> <html&g ...