正则表达式和反射

一、正则

进行复杂字符串的处理时使用StringBuffer这些类远远不够于是并有了正则表达式

  1. 正则表达式功能的分类

  1. 匹配String类的matches方法

调用方式Egreturn num.matches("[1-9][0-9]{4,11}"); 其中[1-9][0-9]分别判断num数字的第一位第二位是否分别为1-9的数字和0-9的数字,{4,11}花括号表示位数范围不少于4位不多于11

匹配字符:

Eg2String str = "b8c";

boolean b = str.matches("b[\\W]c");

[^a-z]不是a-z之间的,\d0-9\D非数字,\w字符[a-zA-Z_0-9] 26个字母大小写,0-9数字 下划线_\W非字符

匹配数量词:

return num.matches("abc+");//匹配C(匹配符旁边的字符)出现的次数

? 一次或者一次也没有,× 零次或多次 ,+ 一次或多次 ,X{n},恰好 n 次,X{n,} 至少 n 次 ,X{n,m}至少 n 次,但是不超过 m

记住验证邮箱的格式:

boolean b = email.matches("[a-zA-Z0-9_]+@[0-9a-z]+(\\.[a-z]+)+");

  1. 切割

切掉重复的字符

String str = "wqqqqadjffffhfdwccccceswwwr";

String[] array = str.split("(.)\\1+");

  1. 替换

把重复的字母切成一个

String str = "wqqqqadjffffhfdwccccceswwwr";

String s = str.replaceAll("(.)\\1+","$1");

System.out.println(s);

  1. 查找 Pattern

    Eg:如下案例获取字符串中含三个字母的单词。

String str="father and mother i loveyou where are you from";

步骤1//运行Pattern类的静态方法compile,对正则样式进行预先编译,运行结果就是pattren对象

Patternp=Pattern.compile("\\b[a-zA-Z]{3}\\b");

步骤2将字符串,和正则进行匹配,用的是类的非静态方法 matcher,返回的结果是 Matcher对象

Matcherm=p.matcher(str);

步骤3使用Matcher类的方法find查找,95); font-family:宋体; font-size:12pt">返回boolean类型值

System.out.println(m.find());

获取查找结果用对象的方法group

System.out.println(m.group());

// System.out.println(m.start()+"..."+m.end())可以和m.group的效果相同

二、反射

由来:使用户不需要改动源程序就可以改变程序运行效果(扩展程序)。

应用:JavaWeb android底层实现原理有是反射原理。

含义:对一个类的class文件进行解刨,直接从class文件,获取方法并运行

java.lang.classclass对象进行描述的类。

编程的时候,会写方法,构造方法,成员变量

构造方法。也被看成是对象有构造方法的表述类java.lang.reflect.constructor

成员方法,也被看成是对象有成员方法的表述类java.lang.reflect.Method

成员变量,也被看成是对象,有成员变量对象的描述类 java.lang.reflect.Field

第一种:

Person p=new Person();

Class c1=p.getClass();

第二种Class c2=Person.class

第三种forName(字符串类名)

Classc3=Class.forName(“Person”);//会出异常即使抛出。必须加上包名如下所示。

Classc3=Class.forName(“cn.itcast.redlect.Person”)

静态代码块运行非静态的不运行(必须new对象才会运行)。主推第三种方法

开始进行解剖这个文件

一、获取class文件对象

获取构造方法,并运行

私有构造方法,带参数的构造(day27_exercise里面的源程序其中两个public类型的一个空参一个带有两个参数intstring)

public staticvoidmain(String[] args) throws Exception {

首先获取class文件对象

Classc1=Class.forName("Fs.Person");

对象中的方法获取构造方法

Constructor[]cons=c1.getConstructors();注意后面是Constructor带有s获取的都是public权限的构造方法

for(Constructorc:cons){

System.out.println(c);得到三个构造方法分别是无参有int参和有Sring两种种

}

运行构造方法必须首先创建对象, getConstructor(Class<?>... parameterTypes)

获取一个构造方法,获取空参数的构造方法

Constructorcon1=c1.getConstructor();获取空参数的构造方法

System.out.println(con1);运行结果public Fs.Person()

//运行构造方法,在描述构造方法的类 newInstance(Object... initargs)参数:调用构造方法的时候传递的

Objectobj=con1.newInstance();

System.out.println(obj);结果空参数的构造方法

同理,获取有参数的构造方法

Constructorcon2=c1.getConstructor(String.class,int.class);

System.out.println(con2);

obj=con2.newInstance("余猛",24); //运行构造方法,赋值。

System.输出结果:有String类的构造方法

//Person余猛...24null

获取私有的构造方法并运行

// Constructor<T>getDeclaredConstructor(Class<?>... parameterTypes) 获取单个

// Constructor[]<T>getDeclaredConstructors(Class<?>... parameterTypes) 获取所有构造方法共有、私有、默认等。

Constructorcon3=c1.getDeclaredConstructor(class);

/* 构造方法全部输出

* Constructor[]con4=c1.getDeclaredConstructors();

for(Constructorc:con4){

System.out.println(c);} */

// Constructor父类 AccessibleObject void setAccessible(boolean flag) 来实现暴力访问

con3.setAccessible(true);true时跳过安全性检查

obj=con3.newInstance(2);

System.out.println(obj);

}

注意区分ConstructorsConstructor的区别,以及getDeclaredConstructorsgetDeclaredConstructor的区别

二、获取成员变量,并修改值

Field f2=c1.getDeclaredField("name");获取私有的成员变量

Fieldf3=c1.getDeclaredField("age");

Fieldf4=c1.getField("address");获取公共的成员变量

Objectobj=c1.newInstance();

f2.setAccessible(对私有成员变量跳过检查

f3.setAccessible(true);

对成员变量赋值

f2.set(obj,255); font-family:Consolas; font-size:12pt">");

f3.set(obj,25);

f4.set(obj,255); font-family:宋体; font-size:12pt">武汉");

System.out.println(obj);//运行结果空参数的构造方法 Person余猛...25武汉

//获取成员变量getField,getFields以及//getDeclaredFields,getDeclaredField和构造方法是用类似

三、获取成员方法,并运行

Class c1=Class.forName("Fs.Person");

Methodm=c1.getmethod("show");

Methodm1=c1.getDeclaredMethod("method",85); font-family:Consolas; font-size:12pt">class);注意格式括号里面第一个是方法名第二个是方法参数

Objectobj=c1.newInstance();

m.invoke(obj);

m1.setAccessible(true);

m1.invoke(obj,3223);

运行结果

空参数的构造方法

show方法公共权限

method方法私有权限,带有一个参数3223

正则表达式和反射的更多相关文章

  1. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5 WebSocket实现点对点聊天的示例代码

    这篇文章主要介绍了HTML5 WebSocket实现点对点聊天的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

  4. ios – 在Swift中将输入字段字符串转换为Int

    所以我非常擅长制作APP广告Swift,我试图在文本字段中做一些非常简单的输入,取值,然后将它们用作Int进行某些计算.但是’vardistance’有些东西不正确它是导致错误的最后一行代码.它说致命错误:无法解开Optional.None解决方法在你的例子中,距离是一个Int?否则称为可选的Int..toInt()返回Int?因为从String到Int的转换可能失败.请参阅以下示例:

  5. 如何在iOS中检测文本(字符串)语言?

    例如,给定以下字符串:我想检测每个声明的字符串中使用的语言.让我们假设已实现函数的签名是:如果没有检测到语言,则返回可选字符串.因此,适当的结果将是:有一个简单的方法来实现它吗?

  6. xamarin – 崩溃在AccountStore.Create().保存(e.Account,“);

    在Xamarin.Forms示例TodoAwsAuth中https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/oauth/成功登录后,在aOnAuthenticationCompleted事件中,应用程序在尝试保存到Xamarin.Auth时崩溃错误说不能对钥匙串说期待着寻求帮助.解决方法看看你

  7. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  8. xcode – 错误“线程1:断点2.1”

    我正在研究RESTAPI管理器.这是一个错误,我无法解决它.我得到的错误在下面突出显示.当我打电话给这个班级获取资源时:我评论的线打印:Thread1:breakpoint2.1我需要修复错误的建议.任何建议都非常感谢解决方法您可能在不注意的情况下意外设置了断点.单击并拖动代表断路器外部断点的蓝色刻度线以将其擦除.

  9. ios – 更改导航栏标题swift中的字符间距

    类型的值有人可以帮我这个或建议一种不同的方式来改变swift中导航栏标题中的字符间距吗?解决方法您无法直接设置属性字符串.你可以通过替换titleView来做一个技巧

  10. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部