正则表达式Pattern:符合一定规则的表达式,
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作,这样就简化书写。
好处:可以简化对字符串的复杂操作。
弊端:福哈定义越多,正则越长 ,阅读性越差。
具体操作功能:
1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合就返回false。
String str = "b9";
String reg = "[bcd][0-9]";//定义正则表达式字符串,匹配第一个字符与第二个字符
boolean b = str.matches(reg);//返回结果为true
2.切割:
String str = "zhangsan lisi wangwu zhaoliu";
String reg = " +";//匹配字符空格出现一次或多次
String[] arr = str.split(reg);//按照reg的格式切割字符串
String str = "asdfadddafddfeaggfadkk";
String reg = "(.)\\1+";//按照叠词完成切割,为了让规则的结果被重用
//可以讲规则封装成一个组,用()完成,组的出现都有编号,
//从1开始,想要是用已有的组可以通过,\n(n就是租的编号)的形式来获取。
3.替换
replaceAll(reg,newStr);//将符合正则规则的字符串部分替换为newStr;
replaceAll("(.)\\1+","$1");//$1:代表前一组的字符。
4.获取:将字符串中符合规则的子串取出。
操作步骤:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出。
class ServerDemo{
public static void main(String[] args){
getDemo();
}
public static void getDemo(){
String str = "ming tian jiu yao fang jia le , da jia.";
String reg = "\\b[a-z]{3}\\b";
//将规则封装成对象。
Pattern p = Pattern.compile(reg);
//让正则对象和要作用的字符串相关联,获取匹配器对象。
Matcher m = p.matcher(str);//其实String类中的matches方法就是用的此对象中的matches方法。
//将规则作用到字符串上,并进行符合规则的子串查找。
while(m.find()){
System.out.println(m.group());//用于获取匹配后的子串
System.out.println(m.strat()+"...."+m.end());//获取匹配子串的索引。
}
}
}
练习1:
需求:
将下列字符串转成:我要学编程。
思路:
1.如果只想知道该字符是对是错,使用匹配
2.想要将已有的字符串变成另一个字符串,替换
3.想要哪找指定的方式将字符串变成多个字符串。切割,获取规则以外的字符串
4.想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
public static void test_1(){
String str = "我我...我我....我我..要要...要..要要..学学学..学学学..编编编..编编...程程...程程.程";
/*
将已有的字符串变成另一个字符串,使用替换功能。
1.可以先将. 去掉。
2.再将多个重复的内容变成单个内容。
*/
str = str.replaceAll("\\.+","");//去掉“.”
str = str.replaceAll("(.)\\1+","$1");//去掉重复。
System.out.println(str);
}
练习2:192.68.1.254 102.49.23.10 10.10.10.2 2.2.2.8 109.90.30.30
将ip地址进行地址段顺序的排序。
还按照字符串自然顺序,只要让他们每一段都是3为即可。
1.按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3为
2.将每一段只保留3为。这样所有的ip地址都是每一段3为。
public static void ipSort(){
String ip="192.68.1.254 102.49.23.10 10.10.10.2 2.2.2.8 109.90.30.30";
ip = ip.replaceAll("(\\d+)","00$1");//将每一段数据前面加俩0;
ip = ip.replaceAll("0*(\\d{3})","$1");//将每一段数据替换为每一段数据的后三位。也就是只保留后三位。
String[] arr = ip.split(" +");
//最后通过集合进行排序
}