0%

【Java编程】Java中的字符串匹配

在Java中,字符串的匹配可以使用下面两种方法:

​ 1、使用正则表达式判断字符串匹配

​ 2、使用Pattern类和Matcher类判断字符串匹配

正则表达式的字符串匹配:

正则表达式:定义一组字符串的一系列字符和符号,它由常量字符和特殊符号构成。

​ 下面是正则表达式的一些预定义字符类,实际上是一些转义字符序列:

​ 1、\d 代表任何数字

​ 2、\D 代表任何非数字字符

​ 3、\w 代表任何单字字符(如:字母、数字、下划线等等)

​ 4、\W 代表任何非单字字符

​ 5、\s 代表任何空白字符

​ 6、\S 代表任何非空白字符

为了匹配一组没有预定义字符类的字符,可以用[]指明

​ 正则表达式常用*、+、?等来表示匹配字符的个数

​ 1、* 表示匹配字符个数为0个或多个

​ 2、+ 表示匹配字符个数为1个或多个

​ 3、? 表示匹配字符个数为0个或1个

​ 4、{n} 表示匹配字符的个数正好为n个

​ 5、{n,} 表示匹配字符个数至少为n个

​ 6、{n,m} 表示匹配字符个数至少为n个,最多为m个

上面简要的介绍了正则表达式的语法,下面通过实例来说明具体用法

​ 定义如下的正则表达式regex:

​ String regex=”[0]\d{2,3}$[-][1-9]$\d{6,7}​”

​ 含义说明如下:

​ 1、[0]表示字符串中第一个字符必须是0

​ 2、\d{2,3}数字0后面最少2个数字、最多3个数字

​ 3、[-]表明这里必须是连字符-

​ 4、[1-9]表示只能是数字1~9

​ 5、\d{6,7}表示这里最少6个数字,最多7个数字

下面通过Java程序来实现下述实例:使用正则表达式判断用户输入的电子邮件地址是否有效,假设要求的格式为:大小写字母开头,后0个或则多个单字符(\w*),然后是[@],其后是一个或多个单字字符,接着是[.],然后是至少两个单字字符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package tengwei.com;

import java.util.regex.Pattern;

import javax.swing.JOptionPane;

public class UseMatchesMethod {

public static void main(String args[])
{
String input = JOptionPane.showInputDialog("请输入有效的电子邮件!");
String reg = "[a-zA-Z]\\w*[@]\\w+[.]\\w{2,}";
if(input.matches(reg))
System.out.println("是有效的电子邮件!");
else
System.out.println("不是有效的电子邮件!");

if(Pattern.matches(reg, input))
System.out.println("是有效的电子邮件");
else
System.out.println("不是有效的电子邮件!");

}
}

使用Pattern类和Matcher类判断字符串匹配

​ 类java.util.regex.Pattern用于创建匹配模式(Pattern)和匹配器(Match)。在上面的程序中,我们使用了该类的静态方法matches(reg,input)判断input是否与给定的正则表达式匹配。对于多次匹配,需要重复调用该方法,因此对于重复匹配而言,它的效率不高。如果需要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package tengwei.com;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UsePattern {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="We call this the live-code approach."
+"These examples are available from three locations-they are "
+"on the CD that accompanies this book";
Pattern expression = Pattern.compile("[a-zA-Z]+");//创建匹配模式
Matcher matcher=expression.matcher(str);//通过匹配模式得到匹配器
//通过这种方式来进行重复匹配的效率较高
String word=null;
int n=0;
while(matcher.find())//扫描是否有匹配的子串,如果匹配器没有重置,则从当前下一个还没进行匹配的字符开始匹配
{
word=matcher.group();//得到匹配的子串
System.out.println(word+"\t");
if((n+1)%4==0)//每行显示四个单词
System.out.println();
n++;
}

System.out.print("\n单词总数:"+n);
System.out.println("\n单词字母9个及以上的单词有:");
Pattern expression1 = Pattern.compile("[a-zA-Z]{9,}");
Matcher matcher1=expression1.matcher(str);
while(matcher1.find())
{
word=matcher1.group();
System.out.println(word+"\n");
}
System.out.println();
}

}
坚持原创技术分享,您的支持将鼓励我继续创作!