在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

【Java编程】Java中的字符串匹配的更多相关文章

  1. Java编程思想中关于闭包的一个例子

    Java编程思想中的一个例子,不是很理解使用闭包的必要性,如果不使用闭包,是不是有些任务就不能完成?继续探索. package InnerClass; interface Incrementable ...

  2. JAVA编程思想中总结的与C++的区别

    Java和C++都是面向对象语言.也就是说,它们都能够实现面向对象思想(封装,继乘,多态).而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象 ...

  3. JAVA判断字符串中某个字符存在的个数

    /** * 判断字符串中某个字符存在的个数 * @param str1 完整字符串 * @param str2 要统计匹配个数的字符 * @return */ public static int co ...

  4. java统计字符串中每个字符出现的次数

    package MapTest; import java.util.HashMap; public class MapTest { public static void Count(String st ...

  5. sql中的字符串匹配、函数大全

    假设你想建立一个与Yahoo功能相似的Internet目录.你可以建立一个表用来保存一系列的站点名称,统一资源定位器(URL),描述,和类别,并答应访问者通过在HTML form中输入要害字来检索这些 ...

  6. 【LeetCode】1408. 数组中的字符串匹配 String Matching in an Array

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力遍历 日期 题目地址:https://leetco ...

  7. leetcode 第184场周赛第一题(数组中的字符串匹配)

    一.函数的运用 1,strstr(a,b); 判断b是否为a的子串,如果是,返回从b的开头开始到a的结尾 如“abcdefgh” “de” 返回“defgh”: 如果不是子串,返回NULL: 2,me ...

  8. 深入剖析Java编程中的中文问题及建议最优解决方法

    摘录自:http://fafeng.blogbus.com/logs/3062998.html http://www.blogbus.com/fafeng-logs/3063006.html 深入剖析 ...

  9. Java中面向字符的输入流

    Java中面向字符的输入流 2016-12-04 Java程序员联盟 Java程序员联盟 Java程序员联盟 微信号 javalm 功能介绍 莫道君行早,更有早行人 全心敲代码,天道自酬勤 字符流是针 ...

随机推荐

  1. 微信小程序基础之创建使用教程

    本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志. 1. 获取 ...

  2. 错误问题:OpenGL version to old,GLViewinitWithRect(const stdbasic_stringchar,stdchar_traitschar,stdalloca

     1电脑装成Linux之后,在Linux里面装虚拟机运行cocos2d-x-3.2时报如下错误: plan3d.exe!cocos2d::GLView::initWithRect(const st ...

  3. 集合框架之Set接口

    一个不包含重复元素的 collection.更确切地讲,set 不包含满足e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素. 在所有构造方法以及 add.equa ...

  4. 一个都不能少: DevOps的3大核心基础架构

    DevOps的涵盖面非常广,因为这个概念的火热,又有很多文章和技术都在把DevOps的帽子扣在自己头上,让很多人迷惑不解.其实,DevOps的知识体系如果从顶层上来分解,只有2块:方法论和工具链.方法 ...

  5. Sharing The Application Tier File System in Oracle E-Business Suite Release 12.2

    The most current version of this document can be obtained in My Oracle Support Knowledge Document 13 ...

  6. 向Github提交代码时遇到的一些问题

    今天分享一下我的一些小经验,那就是向github提交我们的代码.之前一直是直接使用的浏览器完成的代码的下载任务,没有使用过客户端,为了让自己在工作之前熟练使用GitHub,所以就有了下面的这篇博文了. ...

  7. FFmpeg源代码简单分析:结构体成员管理系统-AVOption

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  8. Android 9Patch图片的使用-android学习之旅(十八)

    9patch的使用方法 9patch图片常被用来做消息发送等的图片,只是缩放照片的部分区域,使得图片的整体形状不会受到影响,比较方便. 下面我们介绍一下: 在android的SDK安装目录下的tool ...

  9. 【一天一道LeetCode】#172. Factorial Trailing Zeroes

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  10. Android 5.1.1 源码目录结构

    点击打开链接 最近公司培训新同事,我负责整理一点关于android的基础知识,遥想当年,刚接触android,也是一头雾水, 啥都不懂,就是靠看文档和视频,对android有一个初步了解,然后就通过查 ...