您的位置:首页 > 编程语言 > Java开发

[分享]java.util包的学习笔记一

2010-04-02 16:52 260 查看
[分享]java.util包的学习笔记一
学习了很多东西后,不得不回头再次重温基础内容,开始从util包学习开始,我会陆续的把学习笔记贴上来跟大家分享,同时也
是对自己的监督。由于工作的原因,学习进度无法得到保证,可能不能及时更新还请见谅..

1.Random,Observable

Random:

实现接口:serializable


类:SecureRandom

如果用相同的seed来生成实例,并且调用方法的顺序相同的话,他们会返回相同的数,具有一个代参数(long)的
构造函数

没有类方法,使用一系列的next**()方法来生成伪随机数(pseudorandom),其中double
nextGaussian()返回的是一个高斯正态分布的在0-1之间的double数。

2.regex包

Pattern:

一个正则表达式的编译表现,本身才8个函数:

static Pattern
compile(String regex)创建本身对象的静态工厂方法。参数为一正则表达式,

static Pattern
compile(String regex,int flages)这里的flages为以下中的一种:CASE_INSENSITIVE,
MULTILINE, DOTALL, UNICODE_CASE, and CANON_EQ 可参见think in java (P684)

split(CharSequence
input)这里的CharSequence为一接口,实现该接口的类都可以作为参数(CharBuffer, String,
StringBuffer)该函数根据正则式来切割字符串input;比如

regex=":",input="ajf:::fjo:fjoa:fjd"
返回的结构为String[] s = {"ajf","","","fjo","fjoa","fjd"}。

另外还有一个函数
split(CharSequence input,int limit)后面的一个参数的意思是匹配的次数;例如

regex=":{1,3}",input="ajf:::fjo:fjoa:fjd",limit=3
返回的结构为String[] s = {"ajf","fjo","fjoa:fjd"}

Matcher:

匹配器依靠调用模式(pattern)的metcher(CharSequence)方法来生成,本身没有构造函数,或者
说构造出来的对象没有意义,一旦被创建,有三种方式的匹配操作:

1)matches()匹配所有的字符串是否符合正则式

2)lookingAt()
匹配所输入的字符串从开始的第一个字符开始而不管后面是否匹配,例如:regex="a{1,2}" 那么

input="aajf"或
者"ajfifhgj"都是返回真的,也就是说只要前面的字串符合regex,不管后面的是否匹配都是真的,函数都会返回真值

3)find([int
start])用于发现应用于CharSequence的多重模式匹配。find()就像是一个迭代器,可以在输入字符

串中向前移动,涉及到组
的概念,查找到的匹配字符串通过Matcher.group()返回。

(?m)为模式标志,详细可参考"think in java
第三版译本(P455)"

关于组的概念可以用一下的例子程序看出:

import java.util.regex.*;

class Groups

{

static public
final String poem = "Twas brillig,and the slithy toves ";

public
static void main(String[] args)

{

Matcher m =
Pattern.compile("(?m)(/S+)/s+((/S+)/s+(/S+))$").matcher(poem);


while(m.find()){

for(int i=0; i<=m.groupCount();
i++){ //此时m.groupCount() = 4

System.out.print("["+
m.group(i) +"]");

}


System.out.println("aaaa");

}

}

}

程序输出:[the slithy toves][the][slithy toves][slithy][toves]aaaa

正则表达式有四组,第零组为整个式子,第一组 (//S
+) ,第二组((//S+)//s+(//S
+)),第三组
(//S
+),第四组(//S+)/

所以输出有5个方括号的内容,注意:正则式中没有括号就没有组的概念

start()和end()方法:在匹配操作成功后,start返回先前匹配的起始位置的下标,end返回先前匹配的最后字符的下标加1。

关于替换只有三个函数replaceAll(String),replaceFirst(String),前面的是替换所有的匹配串成参数里面并返
回input,后面的是只把第一

个匹配的串替换为参数里面的字符串。

appendReplacement(StringBuffer,String)
为逐个的替换匹配的串。

这些替换方法在String类里得到充分的运用。

3.Date

时间类:其子类为java.sql包里的Date ,Time, Timestamp类


5个构造方法,一个不带参数,一个是带long型参数,构造Date对象时该参数可由System.currentTimeMillis()


方法获得,其它的都是带年,月,日,时,分,秒等中的几个。主要方法是对日期的比较after,befor,


compareTo,euqals等,另外还有一个void setTime(long time)该参数和前面的构造函数里的long型参数一样。

4.Canlendar

日历类,关于这个类jdk讲的比较罗唆,实际上讲了很大的篇幅的国外的一些历法的差异等,我们基本上不会用

到,Calendar rightNow =
Calendar.getInstance();该rightNow为当前日历(包括当前时间),另getTime()


方法返回一个Date对象,还有一些比较方法,笔者认为知道这么多就够了,实际开发的时候我们查看JDK。

5.Properties
(implement Map)

父类:HashTable

实现接口:Map,Serializable,Cloneable

表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个


字符串,包括一个字段protected Properties defaults,构造函数public Properties(Properties
defaults)

创建一个带有指定默认值的空属性列表。 还有一个不带参数的构造函数。


要注意的一点是最好不要使用put等方法,用 setProperty 方法,这样可以控制值为String型,而不是Object.

6.Iterator

对 collection 进行迭代的迭代器

与枚举有两点不同:


1)迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。

2)方法名称得到了改进


只有三个函数hasNext(),next(),remove()(从迭代器指向的 collection 中移除迭代器返回的最后一个元素)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: