StringTokenizer字符串分解器
示例:
StringTokenizer st = new StringTokenizer(key, ",", false);
while (st.hasMoreTokens()) {
if (userAgent.indexOf(st.nextToken()) != -1) {
return true;
}
}
StringTokenizer 只有三个构造方法
1. StringTokenizer(String str) :被分割对象str,分隔符采取默认分割,Java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。默认的话,所有的分隔符都会同时起作用。
2. StringTokenizer(String str, String delim) :分隔符不采用默认,提供一个指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims) :指定一个特定的分隔符,同时,指定是否返回分隔符。如果是true,分隔符将被作为一个token返回。
API原文描述:If the returnDelims flag is true, then the delimiter characters are also returned as tokens. Each delimiter is returned as a string of length one. If the flag isfalse, the delimiter characters are skipped and only serve as separators between tokens.
方法也不多,只有6个:(所有的方法都是public型)
int countTokens()
对于这个方法API的描述是这样的:Calculates the number of times that this tokenizer'snextToken method can be called before it generates an exception. The current position is not advanced.
它说计算nextToken方法在抛异常以前还能被调用的次数,当前索引不增加。
其实就是说还有几个元素可以被遍历。返回的是 当前可以被访问的元素的个数。
方法:
boolean hasMoreTokens()
boolean hasMoreElements()
用来判断当前还有没有可以遍历的元素
方法:
Object nextElement()
String nextToken()
用来获得当前的元素token,一个返回String类型,一个返回Object类型
还有一个方法:
String nextToken(String delim)
返回当前索引开始,指定分隔符的下一个token。实际返回的是索引当前位置到下一个delim出现为止所有的字符,见例子。
无法想想出这个方法在什么情况下使用。
StringTokenizer test = new StringTokenizer("J-PHONE,Vodafone,SoftBank",",");
while(test.hasMoreTokens()){
System.out.println("count0="+test.countTokens());
System.out.println("carry"+test.nextToken());
System.out.println("count1="+test.countTokens());
//System.out.println(" " + test.nextToken("*"));
}
输出结果:
count0=3
carryJ-PHONE
count1=2
count0=2
carryVodafone
count1=1
count0=1
carrySoftBank
count1=0
如果代码换成element:
while(test.hasMoreElements()){
System.out.println("count0="+test.countTokens());
System.out.println("obj" + test.nextElement());
System.out.println("count1="+test.countTokens());
}
输出的结果是一样:
count0=3
objJ-PHONE
count1=2
count0=2
objVodafone
count1=1
count0=1
objSoftBank
count1=0
但是 需要注意是nextElement()返回是对象类型,不是String类型,需要根据需要转化下
还要说一个StringTokenizer比较不好的地方,就是她的索引无法返回,一旦nextToken 就不能返回了,像上面两种写法同时存在的话,只有第一个循环能有数据输出,第二个循环是不能进去的。如果哪位大侠知道返回的方法请赐教。
语句:
System.out.println("count0="+test.countTokens());
System.out.println("obj=" + test.nextElement());
System.out.println("next=" + test.nextToken("*"));
System.out.println("count1="+test.countTokens());
输出结果:
count0=2
obj=J-PHONE
next=,Vodafone
count1=1
转自:http://blog.csdn.net/laoma4102/article/details/7084394
StringTokenizer字符串分解器的更多相关文章
- StringTokenizer(字符串分隔解析类型)
java.util.StringTokenizer 功效:将字符串以定界符为界,分析为一个个的token(可理解为单词),定界符可以自己指定. 1.构造函数. 1. StringTokenizer( ...
- POCO库——Foundation组件之核心Core
核心Core: Version.h:版本控制信息,宏POCO_VERSION,值格式采用0xAABBCCDD,分别代表主版本.次版本.补丁版本.预发布版本: Poco.h:简单地包含了头文件Found ...
- Spring源码分析——BeanFactory体系之接口详细分析
Spring的BeanFactory的继承体系堪称经典.这是众所周知的!作为Java程序员,不能错过! 前面的博文分析了Spring的Resource资源类Resouce.今天开始分析Spring的I ...
- Java复习随笔
1.StringTokenizer str = new StringTokenizer("字符串"); str.countTokns(); //可得出字符串非连续的个数(可用于 ...
- JAVA基础5——与String相关的系列(2)
差异点比较 String使用+直接拼接 这种情况需要分两种情况来讨论: 1. 都是确定的字符串常量之间进行的+号拼接的时候,由于在编译器就可以确定其具体值了,所以编译器在编译期的时候就会把这些常量拼接 ...
- java基础-学java util类库总结
JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...
- Spring 之 BeanFactory 源码 - 接口分析
一.BeanFactory的基本类体系结构(接口为主):
- java字符串分解 StringTokenizer用法(比split()方法效率高)
Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你. int countTokens ...
- Java StringTokenizer分割字符串
除了String本身的split方法,JDK在很早就提供了StringTokenizer这个类来分割字符串: 不过,由于正则表达式和String本身的功能越来越多,StringTokenizer已经被 ...
随机推荐
- [转] spring-boot集成swagger2
经测,spring-boot版本使用1.5.2+时需使用springfox-swagger2版本2.5+(spring-boot 1.2 + springfox-swagger2 2.2 在未扫描ja ...
- Oracle中恢复drop掉的表中的数据
今天同事不小心把生产上的一张表直接drop掉了,没有做备份,哥们慌的一匹,来找我这个小白来帮忙解决,于是心血来潮简单总结一下. 其实在oralce中,用drop删掉一张表,其实不会真正的删除,只是把表 ...
- 使用IDEA的maven工程导入ojdbc14 jar包失败
原因:ojdbc是要收费的所以maven无法通过中央仓库下载. 一开始以为是我网络不好,导致下载一直失败,可是我怎么想都不对劲,因为我自己使用了阿里云的镜像,网络不可能有问题吧,于是又使用外网,重新导 ...
- Python学习之路:函数传递可变参数与不可变参数
函数传参的方法: 太基础了,8说了 直接上重点 一.可变参数的传递 可变参数有:列表.集合.字典 直接上代码: a = [1, 2] def fun(a): print('传入函数时a的值为:', a ...
- nginx访问认证+目目录浏览
概述 在实际工作中,企业中有些网站,要求使用账号和密码才能访问,如网站后台.phpMyAdmin .Wiki 平台 等模块ngx_http_auth_basic_module 允许使用“HTTP基本认 ...
- 打印从1到n位数的最大值
题目: 输入数字n,按顺序打印从1到最大的n位十进制数,如输入3,则打印从1.2.3一直到最大的3位数999 参考大数运算的方法.考虑到位数会很大,所以采用字符串的形式解决.对输入的n,创建一个长度为 ...
- 小米9安装charles证书
一.打开你 mac 中对应的 charles 二.点击右上角的help按钮,打开帮助弹窗 三.点击帮助弹窗中的SSL Proxying,选择save charles root certificatio ...
- linux 不能进入系统 Failed to load SELinux policy. Freezing
错误原因 配置关闭SELinux,结果误操作 应修改配置文件/etc/selinux/config中的“SELINUX”参数的值, # SELINUX=enforcing 原始配置 SELINUX=d ...
- JAVA调用ORACLE存储过程时间类型参数没有日期
是因为使用cs.setDate()给数据库传参数只会传日期部分.如果改用如下代码就可以: cs.setTimestamp(3, new java.sql.Timestamp(dKssj.getTime ...
- np.any()基本用法与不一样环境中的用法
import numpy as npa=np.ones((2,3,4))b=np.array([1,2,3])c=b<2k=np.any(c) # 是或的关系,只要有一个满足,则输出为TRUEp ...