学习了很多东西后,不得不回头再次重温基础内容,开始从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 中移除迭代器返回的最后一个元素)