这里主要介绍的是Java中的正则类的基本使用。学了这些基本类的学习后,就可以查看更深入的正则规则。
学了本篇内容你就学习了Java正则的40%剩下的50%~60%需要读者查看API,学习更好的匹配规则和更多的相关练习!!!
学前导读
这里的四大Java提供的API方法,判断、切割、替换、获取功能,其中的三个,判断、切割、替换功能,在String中有实现,这是为了使用便捷String才提供的。
但是完整的四个功能,判断、切割、替换、获取功能,Pattern和Matcher是都实现了的。其中Pattern和Matcher是配合使用的。
在这里匹配文件格式是否为我们需要的文件格式。
public class Split08{
public static void main(String args[]){
String formate="java";
String sta="Split08.java";
String regex=".+\."+formate;
if(sta.matches(regex)){
System.out.println("文件格式符合标准!!!");
}else{
System.out.println("文件格式必须为:["+formate+"]格式!!!");
}
}
}
运行结果:
文件格式符合标准!!!
大家都知道邮箱地址由:【用户名@主机地址】组成!!
下面我们就用分割功能来提取用户名和主机地址!!!
public class Split01{
public static void main(String []args){
String ages="[email protected]";
String strArray[]=ages.split("@");
System.out.println("length="+strArray.length);
System.out.println("邮箱用户名:["+strArray[0]+"]");
System.out.println("邮箱主机地址:["+strArray[1]+"]");
}
}
运行结果:
length=2
邮箱用户名:[webEmainName]
邮箱主机地址:[51dev.com]
但是值得注意的是下面这个例子:
public class Split03{
public static void main(String args[]){
System.out.println("标准字符串!!");
System.out.println("注意长度变化!!!");
String sta="aa bb cc";
System.out.println("被切割字符串=["+sta+"]");
String arrays[]=sta.split("\s+");
int len=arrays.length;
System.out.println("Length=["+len+"]");
for(int i=1;i<=len;i++){
System.out.println("这是第"+i+"个字符串=["+arrays[i-1]+"]");
}
System.out.println("##################################");
sta=" aa bb cc";
System.out.println("被切割字符串=["+sta+"]");
arrays=sta.split("\s+");
len=arrays.length;
System.out.println("Length=["+len+"]");
for(int i=1;i<=len;i++){
System.out.println("这是第"+i+"个字符串=["+arrays[i-1]+"]");
}
System.out.println("##################################");
}
}
运行结果:
标准字符串!!
注意长度变化!!!
被切割字符串=[aa bb cc]
Length=[3]
这是第1个字符串=[aa]
这是第2个字符串=[bb]
这是第3个字符串=[cc]
##################################
被切割字符串=[ aa bb cc]
Length=[4]
这是第1个字符串=[]
这是第2个字符串=[aa]
这是第3个字符串=[bb]
这是第4个字符串=[cc]
##################################
这个例子中多了一个空串!!在编程中注意这个空串的存在!!!
下面在来个分割例子:
切割磁盘路径
public class Split04{
public static void main(String args[]){
System.out.println("切割盘符路径!!!");
String path="I:\SelfPractice\pattern";
String arrays[]=path.split("\\");
System.out.println("数组长度为=["+arrays.length+"]");
for(String i:arrays){
System.out.println("分割结果=["+i+"]");
}
System.out.println("################################");
}
}
运行结果:
切割盘符路径!!!
数组长度为=[3]
分割结果=[I:]
分割结果=[SelfPractice]
分割结果=[pattern]
################################
替换功能很强大,但是在这里只是介绍了它的简单应用,其实它本身是可以做很多事情的。字符去重,字符指定替换,等等。
字符的简单替换
public class Split05{
public static void main(String args[]){
System.out.println("字符串替换功能");
String sta="Hello Regex 110";
String regex="\d";
System.out.println("["+sta.replaceAll(regex,"*")+"]");
}
}
运行结果:
字符串替换功能
[Hello Regex ***]
在这里匹配文件格式是否为我们需要的文件格式。
这就是之前在本文开篇前提到的。Pattern和Mattern的配合使用时,其本身就已经实现了字符串的相关处理,判断、替换、切割、获取功能,这四个功能。但是对于String的本身只实现了判断、替换、切割这三个功能。
因为这些都是查API能够轻松学会的东西,所以在这里就不再写Pattern和Matcher配合使用时的替换、切割这两个功能了。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Split06{
public static void main(String args[]){
System.out.println("Pattern和Matcher的使用顺序!");
String sta="HelloWorld.zip";
String regex="^.+\."+"zip$";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(sta);
if(matcher.matches()){
System.out.println("文件匹配成功!!!");
}else{
System.out.println("文件必须为zip文件!!!");
}
}
}
运行结果:
Pattern和Matcher的使用顺序!
文件匹配成功!!!
从一串单词中找出所有的数字
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Split07{
public static void main(String args[]){
System.out.println("找出单词中的所有数字!!!");
String sta="Hello World 110 Hello 119 World";
String regex="\d+";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(sta);
while(matcher.find()){
System.out.println("找到匹配类型:["+matcher.group()+"]");
}
}
}
运行结果:
找出单词中的所有数字!!!
找到匹配类型:[110]
找到匹配类型:[119]
总结:
正则的基本API方法调用,这是必须会的功能
判断功能
分割功能
替换功能
获取功能
不会的方法调用直接查API。可以照着上面的例子写。
最后:
只会调用这几个方法,进行字符串处理是还不够的,这几个方法只是以后用正则的常识。
大家也能够发现,在使用正则中,匹配规则最重要!!!也就是我写的这几个例子中。变量 regex 的内容是很重要的。即匹配规则!!!
下一步,就是我们学习正则的真正开始!!熟练使用匹配规则!!恰好,正则的规则也是在其它语言中通用的!!也就是说,在这里把正则学好了,在其它语言中只需要学会怎么去通过调用方法执行匹配规则就行了,即regex的内容是不变的!!,但是值得注意的是,这还得看其它语言实现正则实现得怎么样了,有些正则匹配规则,语言中是没有实现的!!
正则是程序员必须会的!!这也是一个程序员的标准!!