JDK中的几个有用的类
在今天的工作中,应用到了下面的这几个类,用处还是挺广泛的,在这里将它们的使用规则和使用说明简要的讲解一下,算是记一下随笔吧。
- java.util.StringTokenizer的应用
也许大家都知道,它可以用来拆分字符串,是的,今天我在工作中碰到了这样的情况,于是顺便学习了一番。
例:
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
这个程序执行的结果,也就是将它按照空格分割开这个字符串,这也许就是它的默认分割方法吧。
若是你将"this is a test"改为"this,is,a,test",那么你必须修改它的分割字符的规则,你需要在它的构造方法中改成这样:
StringTokenizer st = new StringTokenizer("this,is,a,test",",");
这样执行的结果,就可以按照逗号分割这串字符串了。打印的结果也就和刚才的结果一样。
若你想将逗号也打印出来,那么你可以在这个构造方法后面加上true,就可以了。
StringTokenizer st = new StringTokenizer("this,is,a,test",",",true);
这样也就可以将逗号也打印出来了。可以看出,用它来分割一串字符串是很方便的,只要你指定了一种分割字符串的符号,那么就可以按照这个符号来分割字符串了。在分割的过程中,你还可以查看到你的分割统计,可以用StringTokenizer类的countTokens()方法来,查看在分割过程中的统计数字,可以看到它是递减的。 - java.util.regex.Matcher和java.util.regex.Pattern的应用
大家都知道这是用于匹配正则表达式用到的,它的用法,我在这里简单的介绍一下:
首先,要建立模式,然后根据这个模式来匹配所要查询的字符串。
先介绍一下正则表达式的基础知识:符号的简介- 句点符号".":这个符号无论用到什么地方,它只可以匹配一个字符,也就是说,它只可以代表一个字符的位置,例如:"b.y"这个模式,它可以匹配的字符串可以像这样的形式:boy,bay,bty
- 方括号"[]":该符号里可以指定匹配的字符串的单个字符,例如:b[oia]y这种模式,它可以匹配的字符串只可以是这样的形式:boy,biy,bay。其它的字符串就不允许出现了。
- 或符号"|":这个符号的基本意义就是或运算,它的模式允许多个字符,而不仅是单个字符,例如:b(o|i|a|ee|)y,它匹配的字符串就可以是:boy,biy,bay,beey。可以看到它的匹配可以是多个字符,这里还用到了圆括号,圆括号可以用来分组。
- 表示匹配次数的符号
符号 次数 * 0次或多次 + 1次或多次 ? 0次或1次 {n} 恰好n次 {n,m} 从n次到m次 - 连字符"-",它表示一个范围,比如从0到9,因此,匹配号码中的连字符号时,它的前面要加上一个转义字符“/”。例如:电话号码:010-89201293,要匹配这样的字符串可以写这样的匹配器:[0-9]{3}/-[0-9]{8}。
- 否符号"^",如果用在方括号内,"^"表示不想要匹配的字符。例如:[^b]表示第一个字符不能是b开头。
- 空格符"/s",匹配所有的空白字符,包括Tab字符
- 其它符号
符号 等价的正则表达式 /d [0-9] /D [^0-9] /w [A-Z0-9] /W [^A-Z0-9] /s [/t/n/r/f] /S [^/t/n/r/f]
例如:刚才的电话号码,就可以表示为/d{3}/-/d{8} - 分组:
例如下面的程序:
Pattern p = Pattern.compile("(//d{3})//-(//d*)");
String str = "234 werweklsf2132wer123-234jkfs010-3232-wer";
Matcher m = p.matcher(str);
boolean result = m.find();
System.out.println("该次查找获得匹配组的数量为:" + m.groupCount());
while (result) {
System.out.println("匹配成功的字符:" + m.group());
result = m.find();
}
这有两个组,但是匹配的字符串也必须是(/d{3})/-(/d*)这样的样式,才可以匹配出字符串。这个例子的结果是:
该次查找获得匹配组的数量为:2
匹配成功的字符:123-234
匹配成功的字符:010-3232
在这个例子中可以看到使用它来匹配字符串是很方便的。再举一个例子:
Pattern p = Pattern.compile("[,//s]+");
String[] result = p.split("* 5,6 25 7-8 */5");
for (int i=0; i<result.length; i++)
System.out.println(result[i]);
这个例子是用来按照空格来划分给出的字符串,用它就可以将字符串“* 5,6 25 7-8 */5”,划分出一组的字符串。结果是:
*
5
6
25
7-8
*/5
看看,用它来按空格划分字符串是多么方便呀!呵呵。