在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*),然后是[@],其后是一个或多个单字字符,接着是[.],然后是至少两个单字字符。
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是否与给定的正则表达式匹配。对于多次匹配,需要重复调用该方法,因此对于重复匹配而言,它的效率不高。如果需要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高
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();
	}

}

原文:http://blog.csdn.net/tengweitw/article/details/24727521

作者:nineheadedbird

最新文章

  1. Android-横竖屏切换问题(转)
  2. Javascript前端和JAVA后端对加密库的处理实例
  3. icePDF去水印方法
  4. linux工具类之硬盘检测
  5. 协程coroutine
  6. asdasd
  7. Web版RSS阅读器(二)——使用dTree树形加载rss订阅分组列表
  8. CentOS7怎么更换yum源
  9. GIT与SVN的比较
  10. myEclipse导入现成项目出现错误 【申明来源于网络】
  11. 第18月第16天 statusBar
  12. 关于C# WinForm中进度条的实现方法
  13. Android 数据存储02之文件读写
  14. FlytestingToolkit工具派送,懒人的测试思考
  15. gensim学习笔记
  16. PHP SFTP应用(二)
  17. 手淘移动适配方案flexible.js兼容bug处理
  18. 【LeetCode】53. Maximum Subarray (2 solutions)
  19. spring boot(6)-JdbcTemplate访问数据库
  20. python中的coding的格式书写形式

热门文章

  1. springMVC源码分析--AbstractHandlerMapping(二)
  2. Python descriptor
  3. Scheme call/cc 研究
  4. 可能是CAP理论的最好解释
  5. java虚拟机 jvm java堆 方法区 java栈
  6. Cocos2D在新版Swift中常量枚举值引用代码的修改
  7. 关于查找iOS中App路径时所要注意的一个问题
  8. 关于MT8127中sdk的编译出错问题
  9. 剑指Offer——线程同步volatile与synchronized详解
  10. 【Unity Shaders】Alpha Test和Alpha Blending