A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© WaterTheGreat 中级黑马   /  2015-12-21 20:01  /  500 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反射与正则
1.给一个ArrayList<Integer>集合中添加一个字符串数据,并显示
* 思路:1,获取这个集合的字节码对象 然后通过Class对象获取该集合对象.
* 2.再用Class对象获取集合的add方法对象Method
* 3.再把class对象与添加的字符串当参数传给Method的方法invoke.
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Test {
        public static void main(String[] args) throws Exception  {
                List<Integer> list = new ArrayList<Integer>();
                Class<?> cls = list.getClass();               
ArrayList<Integer> obj =(ArrayList)cls.newInstance();
                Method mt = cls.getMethod("add",Object.class);
                mt.invoke(obj, "String");
                //obj.add("String");这样则无法编译通过
                System.out.println(obj);
        }
}
2. 通过配置文件运行类中的方法
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.Properties;
/*
* 思路:
* 1,先将文件写入字节流,然后将字节流写入Properties集合中
* 2,通过getProperties方法获取方法名和类名
* 3,再通过类名获取其class对象
* 4.通过对象和方法名获取其方法
*/
public class Test {
        public static void main(String[] args) throws Exception{
                FileInputStream file = new FileInputStream("Show.txt");
                Properties pro = new Properties();
                pro.load(file);
                file.close();
//通过键值对获取对应的类名和方法名
                String className = pro.getProperty("className");
                String methodName= pro.getProperty("methodName");
//通过反射获得字节码对象和方法对象
                Class<?> cls = Class.forName(className);
                Object obj =cls.newInstance();
                Method mt = cls.getMethod(methodName,null);//方法一定要公用public
//如果是getDeclaredMethod,则也可以获取非公有方法
//如果方法私用,那么要先暴力破解:mt.setAccessible(true);
                mt.invoke(obj,null);
        }
}
3.随即输入QQ号:校验QQ号码:不能以0开头 是5-15位的数字
import java.util.Scanner;
*  * 思路:用正则定义规范,再用String类的匹配方法match方法判断时否正确
public class Test {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                String qq = sc.nextLine();
                String segex ="[^0][0-9]{4,14}";
                boolean flag= qq.matches(segex);
                if (flag) {
                        System.out.println(qq);
                }else{
                        System.out.println("输入格式错误");
                }
4. 邮件校验
//String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+";
                //用\w改写规则\w表示:单词字符:[a-zA-Z_0-9]
//反斜杠\\的用法:当在字符串中,\表示转义,所以要表示明确意思要用两个反斜杠
                String regex = "\\w+@\\w+(\\.\\w+)+";
                boolean flag = eamil.matches(regex);
                System.out.println(flag);
5.将字符串还原成:“我要学编程”。如:我...我.要....
String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";
                String regex = "\\.+";//先把点去掉
                s=s.replaceAll(regex, "");
                System.out.println(s);
                s=s.replaceAll("(.)\\1+", "$1");//再去叠词,注意:这里$1表示前面(.)\\1内的值,也就是任意值.()是组意思
                System.out.println(s);
6.能将这些ip地址排序。按照地址段数值从小到大排序。
"192.168.3.23 202.10.34.2 3.3.3.3 127.0.0.1 80.12.23.34"
思路:
*                 ip地址都是字符串,所有字符串排序,用TreeSet。
*                 如果用TreeSet现在存在每个ip地址,就会有问题。因为有部分ip没有满足三位。
*                 这样比较是有问题的, 所有,我们采取补位的方式。
*                 1:先给每个ip地址的每一个位在前面补2个0。
*                 2:把超出3位的数据,截取成3位。
*/
public class Test {
        public static void main(String[] args) {
                String str = "192.168.3.23 202.10.34.2 3.3.3.3 127.0.0.1 80.12.23.34";

                // 先补2个0
                str = str.replaceAll("(\\d+)", "00$1");
                System.out.println(str);
                // 去除超出3位的前面的0
                str = str.replaceAll("0*(\\d{3})", "$1");
                System.out.println(str);
                // 切割
                String[] ips = str.split(" ");
                // 我遍历这个字符串数组,把每个数据添加到TreeSet集合中。
                TreeSet<String> ts = new TreeSet<String>();
                for (String s : ips) {
                        ts.add(s);
                        // System.out.println(s);
                }
                //System.out.println(ts);
                //最后遍历集合,把前面的0干掉
               
                for(String s : ts){
                        s = s.replaceAll("0*(\\d+)", "$1");

1 个回复

正序浏览
6666666666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马