正则表达式和注解
正则表达式
正则表达式使用单个字符串来表述,匹配一系列符合某个句法规则的字符串。则表达式通常被用来检索,替换那些符合某个模式点的文本。
java.util.regex包中提供以下两个类对正则表达式的支持:
Matcher类
通常解释Pattern对charactor sequence 执行匹配操作的引擎。
Pattern类
正则表达式的编译表示形式。
public final class Matcher extends Object implements MatchRsult
Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定义完的正则,在使用Matcher类进行验证或者替换。
常用的方法
boolean matches() 尝试将整个区域与模式匹配
String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的,输入系列的每一个子序列。
String replaceFirst(String replacement) 替换模式与给定替换字符串相匹配的,输入序列的第一个子序列。
实例
@Test
public void regex_comparto(){
//创建一个匹配模式
Pattern p=Pattern.compile("a*b"); //以a打头b结尾的字符串
//要匹配的字符串
Matcher matcher = p.matcher("aaaajkkdkb");
boolean matches = matcher.matches();
System.out.println(matches);
}
@Test
public void regex_example(){
//验证电话号码
String userNumber="010-38389438";
boolean b = userNumber.matches("\\d{1,3}-\\d{8}");
System.out.println(b);
//匹配ip地址
String ip="20.10.20.123";
System.out.println(ip.matches("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}"));
//匹配用户名 字母开头,数字字母下划线组合
String username="abc123456";
System.out.println(username.matches("[a-zA-z]+[\\w|_]*"));
}
注解
jdk中自带
@override 表示重写父类方法,在编辑期就进行检查
@Deprecated 用于标记方法已过时,不建议使用
@SuppressWarnings(" ") 表示关闭不当的编辑器警告信息, 注意参数 “all” 消除全部警告信息
@Documented 表示的是文档化,可以在生成doc文档的时候添加文档
自定义Annotation
注解应用需要三个步骤
1.编写注解
2.在类上应用注解
3.对应用了注解的类进行反射操作的类
自定义Annotation的语法如下:
访问控制权限 @interface Annotation{}
实例: public @interface MyAnnotation{}
两种形式无默认值和有默认值
//表示该注解的作用该范围在运行时存在
@Retention(RetentionPolicy.RUNTIME)
//无默认值时在使用时要设值
public @interface MyAnnotation {
//定义变量
public String name();
public int age();
}
//有默认值在使用时不用设值
@interface testAnnotation{
//定义变量
public String name() default "xioa";
public int age() default 25;
}
使用MyAnnotation注解
@MyAnnotation(name = "xiao",age = 5)
public class cat {
//设置名字
public String name;
public int age;
@Deprecated //标记已过时,不建议使用
public void Setname(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
}
测试注解的作用,以及反射和注解的作用
public class Annotation {
@Test //标记为测试方法
public void testAnnotation1(){
cat c=new cat(){
@Override //标记为重写方法
public void setName(String name) {
this.name="小明";
}
};
c.Setname("小华"); //调用已过时的方法
System.out.println(c.name);
c.setName("x");
System.out.println(c.name);
}
//反射来处理注解
@Test
public void testAnnotation2(){
Class<cat> catClass = cat.class;
//获取类上应用的指定注解
MyAnnotation annotation = catClass.getAnnotation(MyAnnotation.class);
//获取注解上的变量值
int age=annotation.age();
String name=annotation.name();
//给对象赋值
try {
cat c=catClass.newInstance();
c.setName(name);
c.age=age;
System.out.println(c.name+c.age);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
@Retention
@Target
@Inherited