赛迪网 > IT技术 Java > Java读书频道-中
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

java.util第2部分:更多的实用工具类 (1)

发布时间:2006.06.12 03:15     来源:清华大学出版社    作者:Herbert Schildt 著 张玉清 吴溥峰等 译

 

本章将通过浏览那些不属于类集框架的类和接口的方式来继续研究java.util。这其中包括了标记字符串,处理日期,计算随机数以及观测事件。也包括了在本章后面简要提及的java.util.zip包和java.util.jar包。

16.1 StringTokenizer(字符串标记)

对文本的处理经常包括对格式化的输入字符串进行语法分析。语法分析(Parsing)将文本划分为一组不连续的部分,或标记(tokens),在一个确定的序列中,标记可以表达语义。StringTokenizer类提供了语法分析处理的第一步。经常被称为lexer(词法分析程序)或scanner(扫描程序)。StringTokenizer实现枚举(Enumeration)接口。因此,给定一个输入字符串,可以使用StringTokenizer对包含于其中的单独标记进行枚举。使用StringTokenizer时,指定一个输入字符串和一个包含了分割符的字符串。分割符(Delimiters)是分割标记的字符。分割符字符串中的每一个字符被当做一个有效的分割符——例如,“,;:”建立逗号,分号和冒号分割符。默认建立的分割符有空白符字符,空格,tab键,换行以及回车。

StringTokenizer的构造函数如下所示:

StringTokenizer(String str)

StringTokenizer(String str, String delimiters)

StringTokenizer(String str, String delimiters, boolean delimAsToken)

在上述三种形式中,str都表示将被标记的字符串。在第一种形式中,使用默认的分割符。在第二种和第三种形式中,delimiters是用来指定分割符的一个字符串。在第三种形式中,如果delimAsTokentrue,当字符串被分析时,分割符也被作为标记而被返回;否则,不返回分割符。在第一种和第二种形式中,分割符不会作为标记而被返回。一旦创建了StringTokenizer对象之后,nextToken( )方法被用于抽取连续的标记。当有更多的标记被抽取时,hasMoreTokens( )方法返回true。因为StringTokenizer实现枚举(Enumeration),因此hasMoreElements( )nextElement( )方法也被实现,同时它们的作用也分别与hasMoreTokens( )nextToken( )方法相同。StringTokenizer方法列在表16-1中。下面是一个创建用于分析“key=value”对的StringTokenizer的例子。连续的多组“key=value”对将用分号分开。

// Demonstrate StringTokenizer.

import java.util.StringTokenizer;

class STDemo {

static String in = "title=Java: The Complete Reference;" +

"author=Schildt;" +

"publisher=Osborne/McGraw-Hill;" +

"copyright=2001";

public static void main(String args[]) {

StringTokenizer st = new StringTokenizer(in, "=;");

while(st.hasMoreTokens()) {

String key = st.nextToken();

String val = st.nextToken();

System.out.println(key + "\t" + val);

}

}

}

16-1 StringTokenizer 定义的方法

方法 描述

int countTokens( ) 使用当前分割符集,该方法确定还没被分析的标记的个数并返回结果

boolean hasMoreElements( ) 如果在字符串中包含有一个或多个标记,则返回true;如果在字符串中不包含标记,则返回false

boolean hasMoreTokens( ) 如果在字符串中包含有一个或多个标记,则返回true;如果在字符串中不包含标记,则返回false

Object nextElement( ) 将下一个标记作为Object返回

String nextToken( ) 将下一个标记作为String返回

String nextToken(String delimiters) 将下一个标记作为String 返回并且将分割符字符串设为由delimiters指定的字符串

该程序的输出如下所示:

title Java: The Complete Reference

author Schildt

publisher Osborne/McGraw-Hill

copyright 2001

16.2 BitSet(置位)

BitSet类创建一个专用类型的数组,该数组包含位的值。而该数组的大小可以按需要进行增加。这使得它与位矢量相似。BitSet的构造函数如下所示:

BitSet( )

BitSet(int size)

第一种形式创建一个默认的对象。第二种形式允许指定其初始大小(也就是说,它所能包含的位的个数)。所有的位被初始化为0BitSet实现Cloneable接口并且定义了表16-2中列出的方法。

16-2 BitSet 定义的方法

方法 描述

void and(BitSet bitSet) 将调用BitSet对象的内容与由bitSet指定的那些内容进行相与(AND)运算,结果被放置在调用对象中void andNot(BitSet bitSet) 对应bitSet中的每一位,清除调用BitSet中相应的位(在Java 2中新增加的)

void clear(int index) 对由index指定的位进行置0

Object clone( ) 复制调用BitSet对象

Boolean equals(Object bitSet) 如果调用位集合与由bitSet传递的位集合相等,则返回true;否则,该方法返回false

Boolean get(int bitIndex) 返回指定下标处位的当前状态

int hashCode( ) 返回调用对象的散列值

int length( ) 返回包含调用BitSet的内容所需的位的个数。该值由最后1位的位置确定(在Java 2中新增加的)

void or(BitSet bitSet) 将调用对象的内容与由bitSet指定的内容进行“或”(OR)运算,结果被放置在调用对象中

void set(int index) 设置由index指定的位

int size( ) 返回调用BitSet对象中位的个数

String toString( ) 返回调用BitSet对象的字符串等价形式

void xor(BitSet bitSet) 将调用BitSet对象的内容与由bitSet指定的内容进行“异或”(XOR)运算,结果被放置在调用对象中

这里是一个说明BitSet的例子。

// BitSet Demonstration.

import java.util.BitSet;

class BitSetDemo {

public static void main(String args[]) {

BitSet bits1 = new BitSet(16);

BitSet bits2 = new BitSet(16);

// set some bits

for(int i=0; i<16; i++) {

if((i%2) == 0) bits1.set(i);

if((i%5) != 0) bits2.set(i);

}

System.out.println("Initial pattern in bits1: ");

System.out.println(bits1);

System.out.println("\nInitial pattern in bits2: ");

System.out.println(bits2);

// AND bits

bits2.and(bits1);

System.out.println("\nbits2 AND bits1: ");

System.out.println(bits2);

// OR bits

bits2.or(bits1);

System.out.println("\nbits2 OR bits1: ");

System.out.println(bits2);

// XOR bits

bits2.xor(bits1);

System.out.println("\nbits2 XOR bits1: ");

System.out.println(bits2);

}

}

下面是该程序的输出。当用toString( )方法将一个BitSet对象转换成其相应的字符串形

式后,每组位就由其位置表示。被清除的位将不被显示。

Initial pattern in bits1:

{0, 2, 4, 6, 8, 10, 12, 14}

Initial pattern in bits2:

{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}

bits2 AND bits1:

{2, 4, 6, 8, 12, 14}

bits2 OR bits1:

{0, 2, 4, 6, 8, 10, 12, 14}

bits2 XOR bits1:

{}

1 2 3 4 5 6 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管