Java正则表达式学习
正则表达式是一个字符串,用于描述匹配一个字符串集合的模式。Java正则表达式使用String类的matches方法匹配字符串。
可以使用正则表达式来判断一个字符串是否符合所规定的书写规则。
下列是Java中常用的正则表达式:
如果字符串匹配正则表达式,String类的matches方法将会返回true,如:
System.out.println("Java is fun".matches("Java.*"));
输出的结果为true
所以,如要判断一个字符串是否符合"长度为5~9个数字"的规则
可以使用:
System.out.println("1234".matches("\\d{5,9}"));
结果为false,而
System.out.println("123456".matches("\\d{5,9}"));
的结果为true
通过正则表达式,可以判断一个字符串是否符合所规定的书写规则
如要判断一个字符串是否为前缀为6至13位字符的qq或163邮箱,可以使用:
System.out.println("ab123456@qq.com".matches("\\w{6,13}+@+(qq|163)+\\.+com"));
运行程序,发现"ab123456@qq.com"符合条件,而"a>123456@qq.com"、“12345@qq.com”、“ab123456/qq.com”、"ab123456@sohu.com"等均不符合
==============================================================================
除了匹配字符串的功能,正则表达式也可以让我们实现检索的功能,让我们从字符串中获取想要的部分
String类中的replaceAll、replaceFirst、split方法使我们可以替换和拆分字符串
如下列代码:
System.out.println("abc bc a ac".replaceAll("a\\w", "e"));
输出的结果为"ec bc a e"
“\w"代表了单词字符,通过"a\w"检索字符串中存在字符"a"以及"a"之后连接任意单词字符的部分,并通过replaceAll方法将其替换为"e”
replaceFirst同理,不过替换的是第一次出现符合正则表达式的部分,如:
System.out.println("abc bc a ac".replaceFirst("a\\w", "e"));
输出的结果为"ec bc a ac",replaceFirst方法只替换了字符串中首个符合正则表达式的部分,即字符"abc bc a ac"中的"ab"部分
而split方法则拥有两个重载,分为split(regex)与split(regex,limit)
查看String类,发现:
public String[] split(String regex) {
return split(regex, 0);
}
得知split(regex)重载中关于limit的默认值为0,从split(regex,limit)的方法中发现当limit等于0时会匹配字符串中所有符合条件的部分,得知split(regex)重载方法会切割字符串中每一处符合条件的部分,而split(regex,limit)则会切割符合条件的前limit - 1部分
进行测试:
String[] str = "abc bc a ac".split(" ");
System.out.println(str.length);
发现输出结果为4,即字符串被切割成了4部分,依次输出为"abc",“bc”,“a”,“ac”
再通过:
String[] str = "abc bc a ac".split("a",3);
System.out.println(str.length);
发现输出结果为3,即字符串被切割了2次,依次输出为"",“bc bc “,” ac”