【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*),然后是[@],其后是一个或多个单字字符,接着是[.],然后是至少两个单字字符。

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();
	}

}
时间: 2024-07-31 03:40:56

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

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

LeetCode 1408. String Matching in an Array数组中的字符串匹配[Easy][Python][字符串] Problem LeetCode Given an array of string words. Return all strings in words which is substring of another word in any order. String words[i] is substring of words[j], if can be o

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

(1) 最大的障碍在于速度:解释过的Java要比C的执行速度慢上约20倍.无论什么都不能阻止Java语言进行编译.写作本书的时候,刚刚出现了一些准实时编译器,它们能显著加快速度.当然,我们完全有理由认为会出现适用于更多流行平台的纯固有编译器,但假若没有那些编译器,由于速度的限制,必须有些问题是Java不能解决的. (2) 和C++一样,Java也提供了两种类型的注释.(3) 所有东西都必须置入一个类.不存在全局函数或者全局数据.如果想获得与全局函数等价的功能,可考虑将static方法和stati

Java编程实现中英混合字符串数组按首字母排序的方法

在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: ? 1 2 3 4 5 6 7 String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反对高铁"

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

1 假设你想建立一个与Yahoo功能相似的Internet目录.你可以建立一个表用来保存一系列的站点名称,统一资源定位器(URL),描述,和类别,并答应访问者通过在HTML form中输入要害字来检索这些内容. 2 假如有一个访问者想从这个目录中得到其描述中包含要害字trading card的站点的列表.要取出正确的站点列表,你也许试图使用这样的查询: 3 4 SELECT site_name FROM site_directory WHERE site_desc=’trading card’

20.4.12 周赛 数组中的字符串匹配 简单

题目 给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词.请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词. 如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串. 示例 1: 输入:words = ["mass","as","hero","superhero"] 输出:["

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

一.函数的运用 1,strstr(a,b); 判断b是否为a的子串,如果是,返回从b的开头开始到a的结尾 如“abcdefgh” “de” 返回“defgh”: 如果不是子串,返回NULL: 2,memcpy(a,b+n,c); 将b串从第n位后的c个字符串复制到a中,返回a串: (注:做完函数后需要添加上b[c] = '\0') 如果吧b+n换成b就是从头开始 将代码换成 memcpy(arr[cnt], words[i], strlen(words[i])+1); 就是直接复制words[i

leetcode-184周赛-5380-数组中的字符串匹配

题目描述: 自己的提交: class Solution: def stringMatching(self, words: List[str]) -> List[str]: def strStr(haystack: str, needle: str) -> int: if not needle:return 0 def getNext(s): next_ = [0] * len(s) next_[0] = -1 i = 0 j = -1 while i < len(s) - 1: if j

java编程中的性能提升问题

java编程中的性能提升 软件产品犹如一栋大楼,大楼在建设初期,会有楼房规划,建筑构想,打牢地基,后面才是施工人员进行进行实质性的建设.要保证软件产品的高质量,优秀的架构,优秀的产品设计,是产生高质量的前提.同时,没有过硬的编码实现,一样得不到预期的效果.纵观现在的产品,产品架构没多大差别,基本运用基线版本进行局点定制.而系统中的一些功能性能常常不过关,问题往往就出在编码实现上.这块是开发人员在开发过程中需要注意的.在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良

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

摘录自:http://fafeng.blogbus.com/logs/3062998.html http://www.blogbus.com/fafeng-logs/3063006.html 深入剖析Java编程中的中文问题及建议最优解决方法 说明:本文为作者原创,作者联系地址为:[email protected].由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台