正则表达式和反射
发布时间:2020-12-13 23:12:15 所属栏目:百科 来源:网络整理
导读:---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 1:正则表达式 (1)正则表达式:就是符合一定规则的字符串。 (2)规则字符: 正则表达式的规则字符: A:字符 x 字符 x,任意字符代表自己本身。 反斜线字
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- (1)正则表达式:就是符合一定规则的字符串。 (2)规则字符: 正则表达式的规则字符: A:字符 (3)常用功能: A:判断功能 String -- matches /* * 校验邮箱:xxx@yyy.zzz * * liuyi@163.com * linqingxia@126.com * yangmi@qq.com * liukaiwei@sina.com.cn * shaoyifu@yahoo.cn * hello@itcast.cn */ public class RegexTest { public static void main(String[] args) { // 定义规则 // String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,8}(.[a-zA-Z_0-9]{2,3})+"; String regex = "w+@w{2,8}(.w{2,3})+"; Scanner sc = new Scanner(System.in); System.out.println("请输入你的邮箱:"); String email = sc.nextLine(); boolean flag = email.matches(regex); System.out.println(flag); } } B:切割功能 String -- split /* * 切割功能: * public String[] split(String regex) */ public class RegexDemo { public static void main(String[] args) { // 切割字符串"aa,bb,cc"; String str = "aa,cc"; String regex = ","; String[] strArray = str.split(regex); for (String s : strArray) { System.out.println(s); } System.out.println("**************"); // 切割字符串"aa.bb.cc" String str2 = "aa.bb.cc"; String regex2 = "."; String[] strArray2 = str2.split(regex2); for (String s : strArray2) { System.out.println(s); } System.out.println("**************"); // 切割字符串"-1 99 4 23" String str3 = "-1 99 4 23"; String regex3 = " "; String[] strArray3 = str3.split(regex3); for (String s : strArray3) { System.out.println(s); } System.out.println("**************"); // 切割字符串"-1 99 4 23" String str4 = "-1 99 4 23"; String regex4 = " +"; String[] strArray4 = str4.split(regex4); for (String s : strArray4) { System.out.println(s); } System.out.println("**************"); // 切割字符串"D:itcast20131130day27code" String str5 = "D:itcast20131130day27code"; String regex5 = "\"; String[] strArray5 = str5.split(regex5); for (String s : strArray5) { System.out.println(s); } } } C:替换功能 String -- replaceAll /* * 替换功能: * public String replaceAll(String regex,String replacement) * 用给定的字符串去替换字符串对象中满足正则表达式的字符。 */ public class RegexDemo { public static void main(String[] args) { // 用”#”替换叠词:"sdaaafghccccjkqqqqql"; String str = "sdaaafghccccjkqqqqql"; String regex = "(.)1+"; String result = str.replaceAll(regex,"#"); System.out.println(result); System.out.println("--------------------"); // 叠词保留一次 String str2 = "sdaaafghccccjkqqqqql"; // 叠词是在同一个字符串中用编号来引用 String regex2 = "(.)1+"; // 在替换方法中,第二个字符串数据中可以使用$编号的形式来引用第一个正则表达式中的组的内容 String result2 = str2.replaceAll(regex2,"$1"); System.out.println(result2); System.out.println("--------------------"); // 有些论坛不允许发电话,qq号,银行账号等. // 把数字用“*”替换wert13245asfklwyoeworewsfd6744232433fafs String str3 = "wert13245asfklwyoeworewsfd6744232433fafs"; // String regex3 = "d+"; String regex3 = "d"; String result3 = str3.replaceAll(regex3,"#"); System.out.println(result3); } }
Patter Matcher find() group() /* * 获取功能: * 使用模式对象Pattern和匹配器对象Mathcher */ public class RegexDemo { public static void main(String[] args) { // // 把正则表达式编译成模式对象 // Pattern p = Pattern.compile("a*b"); // // 通过模式对象调用匹配方法获取到匹配器对象 // Matcher m = p.matcher("aaaaab"); // // 调动匹配器对象的判断功能 // boolean b = m.matches(); // System.out.println(b); // 这道题目我们还可以通过判断功能 // String regex = "a*b"; // String str = "aaaaab"; // boolean flag = str.matches(regex); // System.out.println(flag); // 定义规则 String regex = "b[a-z]{3}b"; String str = "da jia zhu yi le,ming tian bu fang jia,xie xie!"; // 想要获取3个字符组成的单词 Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); // public boolean find() // 判断看是否存在有满足条件的子串 // boolean flag = m.find(); // System.out.println(flag); // //获取子串 // //public String group() // String s = m.group(); // System.out.println(s); while(m.find()){ System.out.println(m.group()); } } }
2:反射 (1)反射:就是通过class文件对象,去使用构造方法,成员变量,成员方法。 (2)获取class文件对象 A:Object类的getClass()方法 B:数据类型的静态的class属性 C:Class类forName()静态方法 推荐:开发使用第三种。 (3)反射的应用 A:通过反射获取构造方法并使用 /* * 反射获取构造方法并使用。 * * 构造方法 Constructor * 成员变量 Field * 成员方法 Method * * */ public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException,NoSuchMethodException,SecurityException,InstantiationException,IllegalAccessException,IllegalArgumentException,InvocationTargetException { // 获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); // 获取构造器对象 // 所有公共构造方法 // public Constructor<?>[] getConstructors() // Constructor[] cons = c.getConstructors(); // 所有构造方法 // public Constructor<?>[] getDeclaredConstructors() // Constructor[] cons = c.getDeclaredConstructors(); // for (Constructor con : cons) { // System.out.println(con); // } // 一般我们创建对象,只要一个构造方法就可以了,所以,我们只需要获取一个构造方法即可。 // 我先以无参数构造方法举例 // public Constructor<T> getConstructor(Class<?>... parameterTypes) Constructor con = c.getConstructor();// 表示我使用的是无参数构造方法 // 通过构造器对象创建对象 // public T newInstance(Object... initargs) Object obj = con.newInstance(); System.out.println(obj); } } B:通过反射获取成员变量并使用 /* * 获取成员变量并使用。 */ public class ReflectDemo { public static void main(String[] args) throws Exception { // 获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); // 获取成员变量对象 // Field[] fields = c.getFields();// 获取所有公共的成员变量 // Field[] fields = c.getDeclaredFields();// 获取所有的成员变量 // for (Field field : fields) { // System.out.println(field); // } //获取构造器对象 Constructor con = c.getConstructor(); Object obj = con.newInstance(); // 获取单个的成员变量 Field field = c.getField("age"); // obj.field = 20; //public void set(Object obj,Object value) field.set(obj,20);//给obj对象的field字段赋值为20 System.out.println(obj); } } C:通过反射获取成员方法并使用
/* * 获取成员方法并使用。 */ public class ReflectDemo { public static void main(String[] args) throws Exception { // 获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); // 创建对象 Constructor con = c.getConstructor(); Object obj = con.newInstance(); // Method[] methods = c.getMethods();// 所有公共方法,包括父类的 // Method[] methods = c.getDeclaredMethods();// 本类的所有方法 // for (Method method : methods) { // System.out.println(method); // } //第一种:无参数无返回值 Method m1 = c.getMethod("show",null); m1.invoke(obj,null); System.out.println("---------------"); //第二种:带参数无返回值 Method m2 = c.getMethod("function",String.class); m2.invoke(obj,"林青霞"); System.out.println("---------------"); //第三种:带多个参数有返回值 Method m3 = c.getMethod("reutrnValue",String.class,int.class); Object ooo = m3.invoke(obj,"林青霞",26); System.out.println(ooo); System.out.println("---------------"); //第四种:私有方法的调用 Method m4 = c.getDeclaredMethod("hello",null); m4.setAccessible(true); m4.invoke(obj,null); } } ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |