概念:符合某些规则的字符串.
a.字符:
X字符 X 例: A就表示A
\\反斜线字符
\r回车
\n换行
b.字符类
[abc] 表示a,或者b,或者c
[^abc] 表示除了abc以外的其他23个任意字符
[a-zA-Z] 表示52个英文字符的任何一个字符
[0-9] 表示0-9之间的任意一个字符
c.预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
d.边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
e. 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
f.组和捕获
按照()括起来的内容就可以看成是分组了
例:((A)(B(C)) 4组
第一组 ((A)(B(C)) 1
第二组 (A) 2
第三组 (B(C) 3
第四组 (C) 4
右边引用左边组的内容,是通过编号,必须前面加一个转义符(\\).
(1)匹配功能(JDK 1.4以后出现)
public boolean matches(String regex)
(2)替换功能
public String replaceAll(regex,"")
(3)获取功能
使用的是正则对象Pattern和匹配器Matcher
代码示例:
- <span style="white-space:pre"> </span>//典型使用顺序:
- Pattern p = Pattern.compile("a*b"); //正则表达式
- Matcher m = P.matcher("aaaaab");//被判断的字符串
- boolean b = m.matches();//调用的是判断功能
- 等价于
- String st = "aaaaab";
- String regex = "a*b";
- boolean flag = st.matches(regex);
- System.out.println(flag); // true
boolean find(); 查找
String group(); 获取
2.反射
概念:
JAVA你反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所以属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态
调用对象的方法的功能称为Java语言的反射机制.
要想解剖一个类,必须先要获取到该类的字节码文件对象,而解剖使用的就是Class类中的
方法,所以先要获取到每一个字节码文件对应的Class类型的对象.
获取Class类的对象
方式1:使用类的getClass()方法
方式2:数据类型的.Class静态属性
方式3:使用的是Class类按的forName() 静态方法 类的全路径.
使用哪一种呢
自己写代码完后测试用第二种,开发用第三种.
因为第三种可以使用配置文件配置类的路径(扩展性好,更灵活).
步骤:
1.获取字节码文件对象
2.获取构造器对象,并创建实例
3.获取成员变量或者成员方法对象
4.通过成员变量或者成员方法对象的方法接收2步骤创建的实例
代码示例:
创建类的对象
- String name="com.dsa.类名";
- //寻找该名称类文件,并加载进内存,并非产生class对象
- Class clazz=Class.forName(name);
- //产生该类的对象
- Object obj=clazz.newInstance();
- //得到某一个指定构造方法
- Constructor constructor= Class.forName("").getConstructor(String.class);
- //创建实例对象
- Object obj=constructor.newInstance("abc");
- //Constructor 构造方法:代表某个类中的一个构造方法。
- //得到某个类中所有的构造方法
- Constructor constructors[]= Class.forName("").getConstructors();;
- //得到某一个构造方法
- Constructor constructor= Class.forName("").getConstructor(StringBuffer.class);
- Constructor constructor= Class.getConstructor(StringBuffer.class);
- //创建实例对象
- String str=(String) constructor.newInstance(new StringBUffer("abc"));
- //调用获得的方法时要用到上面相同类型的实例对象
- //Class.newInstance()方法:
- String obj=(String)Class.forName("java.lang.String").newInstance();
- //先得到默认的构造方法,然后用该构造方法创建实例对象。
- //成员变量 Filed类 代表某个类中的一个成员变量
- //对一个类进行反射。
- ReflectPoint pt1=new ReflectPoint(3,5);
- Filed filedy=pt1.getclsss().getFiled("Y");//只代表哪个对象
- Filed filedy=pt1.getclsss().getDeclaredField("x")//获取对象不管是私有还是被保护的
- filedy.setAccessible(true);//设置可以访问,暴力反射
- filedy.get(pt1)//取出Y的值
- //将字段中的b全变成a
- Field[] fields=obj.getClass().getFields();//获取全部对象
- for(Field field :fields){
- if(field.getType()==String.class){//如果是字符串
- String oldValue = (String)field.get(obj);//获取字符串内容
- String newValue = oldValue.replace('b','a');//将字符串内容替换
- field.set(obj,newValue);//将新值赋给对象
- //Method类 成员方法的反射。
- //获取成员方法
- //反射形式:
- Method methodCharAt = String.class.getMethod("charAt"--方法名,int.class--这是参数类型,如果是空参函数则是 null);
- Object obj=clazz.newInstance();
- methodCharAt.invoke(str1,1);
- //数组的反射
- Class clazz=obj.getClass();
- if(clazz.isArray()){
- int len=array.getLength(obj);
- for(int i=0;i<len;I==){
- sopArray.get(obj,i))
- }
- }