关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
正则表达式,又称正规表示法、常规表示法,计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
String的matches方法
<span style="white-space:pre"> </span>/** * qq号校验 需求:长度5-15的数字,不能以0开头 */ private static void fun2() { String s = "023"; boolean b = s.matches("[1-9][0-9]*{4,14}"); b = s.matches("[1-9]\\d*{4,14}");// 相等 System.out.println(b); }
String的split()方法
<span style="white-space:pre"> </span>/** * 切割方法 */ private static void fun3() { // 切割空格 String s = "afdf dfsfd dafa"; String[] names = s.split(" +"); for (String name : names) { System.out.println(name); } // 切割叠词 String s1 = "afdfaaaaaaadfsfdssdafa"; String[] myNames = s.split("(.)\\1+"); for (String name : myNames) { System.out.println(name); } }
String的replaceAll()方法
<span style="white-space:pre"> </span>/** * 替换 */ private static void fun4() { String s1 = "afdfaaaaaaadfsfdssdafa"; String s = s1.replaceAll("(.)\\1+", "$1"); System.out.println(s); }
Matcher的find()方法,查找下一个子序列
Matcher的group()方法,返回由以前匹配操作所匹配的输入子序列
/** * 获取 */ private static void fun5() { Pattern p = Pattern.compile("a*b");//将正则规则封装成对象 Matcher m = p.matcher("aaaaabaaabdfdfaaabss");//匹配的字符串封装成对象 boolean b = m.matches(); // m.find(); // System.out.println(m); while(m.find()) { System.out.println(m.group()); } }
网页爬虫听起来挺好玩,但是道理非常简单,就是在互联网上获取指定规则的数据
而这个指定规则可以使用正则表达式来写
public class PaChong { public static void main(String[] args) throws Exception { List<String> list = fun1(); for (String name: list) { System.out.println(name); } } /** * @throws Exception * */ private static List<String> fun1() throws Exception { URL url = new URL("http://127.0.0.1:8080/myweb/test.html"); InputStream in = url.openStream(); BufferedReader bufr = new BufferedReader(new InputStreamReader(in)); ArrayList<String> list = new ArrayList<String>(); String main_rgex = "\\w+@\\w+(\\.\\w+)+"; Pattern p =Pattern.compile(main_rgex); String line = null; while((line = bufr.readLine()) != null){ Matcher m = p.matcher(line); while(m.find()){ list.add(m.group()); } } return list; } }
1、定义
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
动态获取类中信息,就是java反射 。
2、反射好处
反射技术大大提高了程序的扩展性
3、Java反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理
public static void getClassObject_3() throws ClassNotFoundException { String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className); System.out.println(clazz); }
<span style="white-space:pre"> </span>/** * 创建有参数的实例 * @throws Exception */ private static void fun2() throws Exception { String name = "jinfulin.b.bean"; Class clazz = Class.forName(name); Constructor cons = clazz.getConstructor(String.class,int.class); Object obj = cons.newInstance("sf",21); } /** * 创建一个新的无参的实例 */ private static void fun1() throws ClassNotFoundException,InstantiationException, IllegalAccessException { String name = "jinfulin.p.bean.Person"; Class clazz = Class.forName(name); Object obj = clazz.newInstance();//创建一个新的无参的实例 System.out.println(obj); }
Field field = null; clazz.getField("age");//只能获取公有的 field = clazz.getDeclaredField("age");//只获取本类,但包含私有。 //对私有字段的访问取消权限检查。暴力访问。 field.setAccessible(true); private static void getFileDemo() throws Exception { Class clazz = Class.forName("jinfulin.p.bean.Person"); Field field = null; field = clazz.getDeclaredField("name");//只获取本类,但包含的私有字段。 field.setAccessible(true);//对私有字段的访问取消权限检查。暴力访问。 Object obj = clazz.newInstance(); field.set(obj, "金福林"); Object o = field.get(obj); System.out.println(o); }
<span style="white-space:pre"> </span>Method[] methods = clazz.getMethods();//获取的都是公有的方法。 methods = clazz.getDeclaredMethods();//只获取本类中所有方法,包含私有。 method.invoke(obj, "小强",89);//设置参数值 public static void getMethodDemo_3() throws Exception { Class clazz = Class.forName("cn.itcast.bean.Person"); Object obj = clazz.newInstance(); Method method = clazz.getMethod("paramMethod", String.class,int.class); method.invoke(obj, "小强",89); }
正则表达式用起来虽然简单,但是符合复杂,可读性差,不过呢,一些常见的字符串的正则表达式比如邮箱、身份证号等都可以在网上找的,拿过来用就好。
反射技术比较重要,反射还可以和抽象工厂模式结合做更换db用,反射的知识以后还会再讲到的。
原文地址:http://blog.csdn.net/jinfulin/article/details/44946883