Java正则表达式常用类
1)字符串的替换
public String replaceAll(String regex, String replacement),意思就是利用String regex正则式,使用String replacement替换内容。比如我们来个简单的例子,我们将123替换为明曦君,并进行输出,
package test4;
public class Csdn51_1 {
public static void main(String[] args) {
String str = "你好,我是123".replaceAll("\\d+", "明曦君");
System.out.println(str);
}
}
12345678
run:
你好,我是明曦君
2)字符串的分解,public String[] split(String regex)
使用正则表达式作为指定的分隔符,并将分隔后的内容进行保存,保存在字符串数组中。我们同样举一个简单的例子,我们来匹配字符串中的数字
package test4;
public class Csdn51_1 {
public static void main(String[] args) {
String str1 = "你好,明曦君,今天是2020年3月10日";
String str2 = "2020年3月10日,晴";
String regx = "\\D+";
String[] s1 = str1.split(regx);
String[] s2 = str2.split(regx);
System.out.println("第一句长度:"+s1.length);
System.out.println("第二句长度:"+s2.length);
System.out.println("第一句输出如下:");
for(String s: s1){
System.out.println(s);
}
System.out.println("第二句输出如下:");
for(String m: s2){
System.out.println(m);
}
}
}
run:
第一句长度:4
第二句长度:3
第一句输出如下:
2020
3
10
第二句输出如下:
2020
3
10
这里我们需要注意的是为什么同样多的数字,而输出的长度不一样,我们这里可以理解为,split默认的是在开头的左边应该是我们希望匹配的,如果没有就返回一个空值,所以就看到第一句话的长度是4第一个字符输出的空值,而第二句话开头是数值所以就不返回空值长度为3.
3)字符串的分解,StringTokenized类
同样这个类也是用来分解字符串,但这个方法相对于split来说更适合适用于字符串更简单一点的情况,并且这两个方法的使用也不同,split是使用正则表达式将保留的值储存在字符串数组中,而Tokenizer是需要通过创建对象,然后不使用正则表达式,将值储存在对象中。当然Tokenized还配套有读取统计方法,下面我们来看一下例子,
package test4;
public class Csdn51_1 {
public static void main(String[] args) {
String s = "My dear, 明曦君!";
StringTokenizer ss = new StringTokenizer(s, " ,!");
int x = ss.countTokens();
System.out.println(x);
while(ss.hasMoreTokens()){
String sss = ss.nextToken();
System.out.println(sss);
}
}
}
3
My
dear
明曦君
这里对StringTokenized中的几个函数进行说明, hasMoreTokens():该方法只要字符序列中还有要匹配的符号即计数变量大于0,该方法就返回true,否则返回false。用于控制循环输出; nextToken():该方法是可以逐个获取String对象的字符序列,每调用一次nextToken(),都将获得String中的下一个语言符号。 countTokens():是用于统计我们能够调用多少次nextToken,也就是可以在异常出现前,返回剩余调用nextToken的次数,这里返回的是3说明,还可以调用3次,输出3个字符串序列。
例子
计算“电脑:5800.1元,手机:2999.9元,耳机:50.0元”该语句中的花销总和,
package test4;
public class Csdn51_1 {
public static void main(String[] args) {
String s = "电脑:5800.1元,手机:2999.9元,耳机:50.0元";
String[] ss = s.split("[^0123456789.]+");//提取数字与小数点
System.out.println(ss.length);
float sum = 0;
for(int i =1; i<ss.length; i++){
sum = sum + Float.parseFloat(ss[i]);//字符串转换为浮点型进行计算
}
System.out.println("总费用为: "+sum);
}
}
run:
4
总费用为: 8850.0