因为以后要搞安卓开发,以前又没怎么学习过Java,趁着现在没有正式进入部门之前就想先把Java在重新学习一下,为自己以后的职业道路做好充分准备
我们都知道正则表达式在编程中是经常使用的,判断邮箱格式是否正确,判断某一个字符串是否包含某一个子串,字符串的分割和替换等等,正确地使用正则表达式在很多场合都会给我们带来很多方便和效率,我就根据自己看书和理解,以及到网上发帖询问获得的知识,来简单地谈一下关于正则表达式。
在使用正则表达式之前,我们需要导入java.util.regex
这个库,你需要先使用Pattern.compile()
方法编译正则表达式,注意这是一个静态方法(类方法,可以直接使用类名调用),它根据输入的字符串参数生成一个Pattern
对象,例如:1
private static Pattern p = Pattern.compile("\\w+\\.");
在本例中,输入的参数是"\\w+\\."
,想要理解这个以及其他的正则表达式,你可以查看JDK文档中的java.util.regex.Pattern
这里的\w代表一个构成词的字符[a-zA-Z_0-9]
。+代表一个或者多个前述的表达式(关于其他字符的含义,大家可以查看正则表达式中的详细含义),所以这个例子表示,一个或多个构成词的字符。\.
产生一个字面常量的点号(不能直接用点号,那在正则表达式中代表”任何字符”)。所以这个表达式会匹配任何”由一个或多个字符构成的单词,并且其后紧跟一个点号”
在编译了一个Pattern
对象之后,可以通过调用matcher()
方法使用它,只需把你想要查找的字符串传递给它。matcher()方法生产一个Matcher对象,这个对象包含一组用来从目标对象中做选择的操作
下面我们来看一个例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FindGroup {
private static int count;
public static void main(String[] args){
Matcher m = Pattern.compile("\\w+").matcher("Java isn't easy!");
//Matcher m = Pattern.compile("\\w+").matcher("Java is very easy!");
while(m.find()){
count++;
System.out.println(m.group());
}
System.out.println(count);
}
}
这个例子的输出是:1
2
3
4
5Java
isn
t
easy
4
可能有些网友会觉得好奇,会认为到第一个空格的时候程序就应该停啊,应该是只匹配第一个空格之前的单词啊?其实并非如此,我们可以看一下find()
函数的实现1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public boolean find() {
int nextSearchIndex = last;
if (nextSearchIndex == first)
nextSearchIndex++;
// If next search starts before region, start it at region
if (nextSearchIndex < from)
nextSearchIndex = from;
// If next search starts beyond region then it fails
if (nextSearchIndex > to) {
for (int i = 0; i < groups.length; i++)
groups[i] = -1;
return false;
}
return search(nextSearchIndex);
}
find()
像一个迭代器,从头到尾扫描一遍字符串。由于在上面的例子中,无法匹配空格和‘
,所以在空格和’
处会断开,于是输出结果就如上面所示。group()
是返回匹配到的字符串