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使用笔记的更多相关文章

  1. Java学习笔记--StringTokenizer的使用

    拓展:Pattern.split替代String.split http://www.cnblogs.com/gnivor/p/4386978.html StringTokenizer是一个用来分隔St ...

  2. Hadoop阅读笔记(二)——利用MapReduce求平均数和去重

    前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一 ...

  3. Hadoop阅读笔记(一)——强大的MapReduce

    前言:来园子已经有8个月了,当初入园凭着满腔热血和一脑门子冲动,给自己起了个响亮的旗号“大数据 小世界”,顿时有了种世界都是我的,世界都在我手中的赶脚.可是......时光飞逝,岁月如梭~~~随手一翻 ...

  4. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  5. 【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程

    一.概要描述 shuffle是MapReduce的一个核心过程,因此没有在前面的MapReduce作业提交的过程中描述,而是单独拿出来比较详细的描述. 根据官方的流程图示如下: 本篇文章中只是想尝试从 ...

  6. Hadoop学习笔记2 - 第一和第二个Map Reduce程序

    转载请标注原链接http://www.cnblogs.com/xczyd/p/8608906.html 在Hdfs学习笔记1 - 使用Java API访问远程hdfs集群中,我们已经可以完成了访问hd ...

  7. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  8. Hadoop学习笔记(8) ——实战 做个倒排索引

    Hadoop学习笔记(8) ——实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...

  9. Hadoop学习笔记(4) ——搭建开发环境及编写Hello World

    Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...

随机推荐

  1. 老李推荐:第8章3节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 3

    首先它通过查找JVM中的System Property来找到"com.android.monkeyrunner.bindir"这个属性的值,记得前面小节运行环境初始化的时候在mon ...

  2. 浏览器访问php脚本通过sendmail用mail函数发送邮件

    前几天做项目遇到这样的一个问题:当某一个结点下有新的文章发表的时候,以邮件的形式通知该结点下的所有用户.这就需要用到邮件发送的功能. 因为项目是php语言做的,所以最简单的方法就是使用php自带的函数 ...

  3. Mybatis基础学习(三)—映射文件

    一.输入映射 1.parameterType     指定输入参数的Java类,可以使用别名或者类的全限定名.它也可以接受基本数据类型.POJO对象.HashMap.   (1)基本数据类型   (2 ...

  4. 设计模式的征途—2.简单工厂(Simple Factory)模式

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...

  5. Apache Beam 剖析

    1.概述 在大数据的浪潮之下,技术的更新迭代十分频繁.受技术开源的影响,大数据开发者提供了十分丰富的工具.但也因为如此,增加了开发者选择合适工具的难度.在大数据处理一些问题的时候,往往使用的技术是多样 ...

  6. C++(浅析枚举类型-enum)

    枚举类型 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓&quo ...

  7. selenium实例:unittest框架+PO开发模式

    这是<selenium2+python学习总结>的升级版. 1.         项目结构 2.         项目代码 1)         globalparameter.py # ...

  8. 第八章 Hibernate数据操作技巧

    第八章   Hibernate数据操作技巧8.1 分组统计数据    语法:[select]... from ...[where] [group by...[having...]] [order by ...

  9. es5和es6实现lazyman

    es6实现 1 class _LazyMan { constructor(name) { this.tasks = []; this.sleep = this.sleep.bind(this); th ...

  10. 2017-4-18 ADO.NET

    1.什么是ADO.NET?     (是一种数据库访问技术) ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问 ...