正则表达式小练习01

练习:

正则表达式优化字符串

解释:

  • String类下匹配正则表达式替换的方法为replaceAll()
  • 第一步,去除点。点本身是正则的通配符,所以需要转义。
  • 第二步,去除叠词。点匹配任意词,以小括号包围编组,将1转义过后,\\1 代表引用第一组匹配内容,即是叠词匹配。+ 代表第一组内容出现一次或多次。
  • 不同字符串中,引用组采用 $1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Exercise01 {

public static void main(String[] args) {

String str = "我...我...我要...要学...学...学...学编程...程!";

System.out.println(method(str));
}

private static String method(String str){

str = str.replaceAll("\\.+", "");
return str.replaceAll("(.)\\1+","$1");

}
}

拓展:

  • 多个组互相包含时,数左括号数即可判断一共多少组
  • 以左括号出现顺序,所包含的部分即为该顺序组
  • 组从1开始计,0组代表整个表达式

练习:

IP地址排序

1
2
3
4
5
192.68.1.254
102.49.23.13
10.10.10.10
2.2.2.2
8.109.90.30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Exercise02 {

public static void main(String[] args) {

String str = "102.49.23.13 192.68.1.254 10.10.10.10 2.2.2.2 8.109.90.30";

String s = str.replaceAll("(\\d+)", "00$1");
s= s.replaceAll("0*(\\d{3})", "$1");
String[] strings = s.split(" +");

Set<String> set = new TreeSet<>();
set.addAll(Arrays.asList(strings));

for (String s1 : set) {
s1 = s1.replaceAll("0*(\\d+)", "$1");
System.out.println(s1);
}
}
}