Java正则表达式简单介绍

所谓的正则表达式就是用来操作字符串的,正则表达式虽然简化了代码功能的实现,但是阅读性变得较差,所以要能熟练的使用的正则表达的就必须要熟练的记住具体符号的含义。

eg1:

public class RegexDemo {
	public static void main(String[] args) {	
		String qq = "1234567";		
		String regex = "[1-9][0-9]{4,9}";//正则表达式。
                boolean b = qq.matches(regex);		
		System.out.println(qq+":"+b);}
				
	}

上面的代码就是一个简单的正则表达式的使用,其中的'[]'表示的就是当前位置的元素的可取的值,‘{}’表示的就是前一位的可以出现的次数,上面的正则表达式表示的就是第一位部位0,(这里使用了[1-9]就是表示的是只能是1-9中的其中一个数字)第二位是0到9中的任意的一个数字,后面的就是和第二位的一样,因此就可以使用{4,9}来表示的,表示的就是后面的可以出现和第二位一样的四次到九次。定义完了正则表达式后就可以使用函数matches()来判断字符串是否否和要求了。

eg2:

正则表达式常见的操作用如下的集中用法

1)匹配字符串:其实就是调用字符串的matches()的方法,eg1就是一个匹配的简单的使用。注意在字符串中有些预定义的字符如:\d表示的就是数字类,\D表示的就是非数字类,如在实际中用的比较多的就是判断是否是手机号的正则表达式:

/*手机号的第一位是固定的‘1’,第二位是3,4,5,7,8中的一位,而后面剩下的数据就是九位常用的数字了,这里使用了预定符来表示的,注意这里要使用的是\\因为这里的\d表示的是数字,如果只写一个的话表示的就是一个转移符,所以要使用\\来表示一个‘\’*/
String regex = "1[34578]\\d{9}";
String str = "15553458907";
boolean b = str.matcher(regex);

2)切割字符串,其实就是相当于字符串中的split();方法了。

String str = "hellottttxiaoqiangmmmmmmworld";	
		String[] names = str.split("(.)\\1+");//str.split("\\.");		
		for(String name : names){
			System.out.println(name);
		}
上面的代码使用了正则表达式中的组的概念,在正则表达式中使用'()'表示一个组,在上面中使用(.)表示的就是第一个为任意的字符,而后面的\\1+是一个数量词,这里表示的就是前一个字符出现的次数必须是大于1的,如果这里只写一个1而没有转移符表示的就是1字符。

3)替换,其实就是调用字符串中replaceAll()方法了。

	String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
		
		str = str.replaceAll("(.)\\1+", "$1");//结果为zhangsantxiaoqiangmzhaoliu

		System.out.println(str);
		
		String tel = "15800001111";//158****1111;
		
		tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");//2
		
		System.out.println(tel);

上面的代码使用了替换,而且这里还是用了正则表达式中的值,在replaceAll方法中如果第二个参数要使用第一个参数的中正则表达式的值,那么需要使用$符号了,1表示的就是第一组的值。在2地方上使用了在网站中常用的一个隐藏的手法,就是将手机好的中间的数字给隐藏起来,就是使用了这种用法。

4)获取,这个方法是比较复杂的,简单的理解就是从某一个字符串中解析出字需要的字符串

String str = "zhe li shi yong le zheng ze biao da shi!";
		
		String regex = "\\b[a-z]{3}\\b";
		
		//1,将正则封装成对象。
		Pattern p = Pattern.compile(regex);
		//2, 通过正则对象获取匹配器对象。 
		Matcher m = p.matcher(str);
		
		//使用Matcher对象的方法对字符串进行操作。
		//既然要获取三个字母组成的单词 
		//查找。 find();
		System.out.println(str);
		while(m.find()){
			System.out.println(m.group());//获取匹配的子序列
			
			System.out.println(m.start()+":"+m.end());
		}

上面的代码实现的是将str字符串中的三个字母的字符选择出来,这里使用了一个边界符\\b,如果不适用的会选择出bia(biao)这就不符合实际的要求了。这里首先要将正则表达式封装成一个Pattern对象,然后通过这个对象的matcher方法来操作这个字符串,最后使用通过group方法来获取匹配的字符对象。



反射技术(理解):

所谓的反射技术就是动态的获取指定文件的class文件。tomcat就是通过反射技术来实现处理用户请求的,tomcat对外暴漏了
servlet接口,程序员通过实现这个接口来处理相应的请求,然后在web.xml的配置文件中配置这个servlet的信息,在tomcat的
内部就可以通过这个配置文件来得到这个类,从而处理相应的请求。
反射简单的理解就是获取一个类的字节码文件,然后就可以通过这个字节码文件来操作类中的所有的方法和属性了。获取某一个
类的字节码文件对象有三种方式:
1、
Person p = new Person();
Class clazz = p.getClass();

2、
Class clazz = Person.class();

3、
Class clazz = Class.forName("org.test.Person")//这里要写全名,否则会报错的!!!

其中第三种是最常用的一种方式

使用反射的好处:
在实际的开发中使用反射技术的扩展性很好,因为在实际中只需要给配置文件相应的配置信息就可以得到对应类的字节码文件,然后
通过这个文件就可以操作具体的类了,这里包括创建实例,创建一个不带参数的实例是通过字节码文件的newInstance()方法来得到的
(执行的过程是通过给的字符串类型的类名来找到对应的字节码文件,然后将其加载到内存中的)如果这里的对象没有一个空的构造函数
的话就会报错,这时候要创建构造函数的话就需要使用
String name = "org.reflect.bean.Person";
//找寻该名称类文件,并加载进内存,并产生Class对象。
Class clazz = Class.forName(name);
//获取到了指定的构造函数对象。这里假设Person的构造函数是一个String类型和Int类型的参数
Constructor constructor = clazz.getConstructor(String.class,int.class);//在这里也要使用构造函数的字节码文件来
//通过该构造器对象的newInstance方法进行对象的初始化。
Object obj = constructor.newInstance("小明",38);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值