java基础10:正则表达式与反射
来源:互联网 发布:淘宝抢购编辑脚本 编辑:程序博客网 时间:2024/05/16 15:10
关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、正则表达式
一、概述
1、概念:
正则表达式,又称正规表示法、常规表示法,计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
2、作用
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
3、正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
二、常见功能
1,匹配
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);}
2,切割
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);}}
3,替换
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);}
4,获取
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反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理
二、获取Class对象
public static void getClassObject_3() throws ClassNotFoundException {String className = "cn.itcast.bean.Person";Class clazz = Class.forName(className);System.out.println(clazz);}
三、获取Class中的构造函数
<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);}
四、获取Class中的字段
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);}
四、获取Class中的方法
<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用,反射的知识以后还会再讲到的。
- java基础10:正则表达式与反射
- java基础11:正则表达式与反射
- Java基础正则表达式、反射
- 黑马程序员—java基础之反射与正则表达式
- JAVA基础--正则与反射
- Java基础之反射,正则表达式
- 反射与正则表达式
- 反射与正则表达式
- java反射,正则表达式
- 黑马程序员————Java基础日常笔记---反射与正则表达式
- 黑马程序员--Java基础--正则表达式、反射机制
- java基础——反射技术、正则表达式、HTML、CSS
- 黑马程序员-----java基础(正则表达式和反射)
- 黑马程序员-java基础(十)-反射、正则表达式
- java基础——XML、正则表达式、反射机制
- Java基础——反射机制、正则表达式
- Java与正则表达式之正则表达式基础
- day28_反射与正则表达式
- 排序之插入排序
- Java8 十大新特性详解
- leetcode Remove Duplicates From Sorted List
- TIPTOP ERP 常用重要s_ & cl_ 函数总结
- spring整合redis
- java基础10:正则表达式与反射
- 第一次筛选用where,紧接着group by 分组,再次筛选用having
- 广义表的链式定义和基础操作
- POJ 1330 Nearest Common Ancestors (在线LCA转RMQ)
- c#第一次作业
- SSH整合
- 关于多图纸设计的介绍
- 关于建站的学习笔记(一)
- javaApi调用Hbase 单机模式