基本正则表达式
正则表达式简介
实际开发中,经常需要对字符串数据进行一些复杂的匹
配、查找、替换等操作。通过"正则表达式",可以方
便的实现字符串的复杂操作。
正则表达式是一串特定字符,组成一个"规则字符串"
这个"规则字符串"是描述文本规则的工具。正则表达
式就是记录文本规则的代码。
例如
正则表达式:"[a-z]"表示a到z的任意一个字符
正则表达式"[a-z]+"表示由1个或多个a一z字符组成的字
符串。
字符集合
正则表达式 说明
[abc] a、b、c中任意一个字符
[^abc] 除了a、b、c的任意字符
[a-z] a,b,c………z,中的任意一个字符
[a-zA-Z0-9] a-z, A-Z,0-9中的任意一个字符
[a-z&&[^bc]] a、z中除了b和c以外的任意一个字符,其中
&&表示"与"的关系
. 任意一个字符
\d 任意一个数字字符,相当于[0一9]
\w 单词字符,相当于[a-zA-Z0-9_]
\s 空白字符,相当于[\t\n\x0B\f\r]
\D 非数字字符
\W 非单词字符
\S 非空白字符
X? 表示0个或1个×
X* 表示0个或任意多个×
X+ 表示1个到任意多个×(大于等于1个×)
X{n} 表示n个×
X{n,} 表示n个到任意多个×(大于等于n个×)
X{n,m} 表示n个到m个×
正则表达式:数量词
简化数量词的书写
正则匹配特殊字符时候, 需要利用 \ 进行转意:
匹配手机号的正则
边界匹配: 如果需要匹配一个字符串的整体
规则, 则需要使用边界匹配:
^ 匹配开始
$ 匹配结束
字符串切片方法(劈开方法)!!
replaceAll:字符串替代方法。
Object
Object
在Java类继承结构中,java.lang.Object类位于顶端,
·如果定义一个Java类时没有使用extends关键字声明其父
类,则其父类默认为java.lang.Object类,
Object类型的引用变量可以指向任何类型对象
package day02; /* * Object 的toString方法 * * 建议在子类中重写toString方法. * Java 提供的API几乎都重写了 toString() * 包括: String StringBuilder Date Integer... */ public class ObjectDemo2 { public static void main(String[] args) { /* * 调用toString方法 */ Point p = new Point(5, 6); //调用重写的方法, 会自动调用子类重写的方法 String s = p.toString(); System.out.println(s); //5, 6 /* * toString方法的用途: Java的API会自动调用 * toString方法, 利用这个特点可以简化 * 程序的调试输出. 如: println(p) 会 * 自动调用toString * * 重写toString很方便!!! */ //输出5个点的坐标 Point p1 = new Point(2, 3); Point p2 = new Point(4, 3); Point p3 = new Point(7, 7); Point p4 = new Point(1, 9); Point p5 = new Point(7, 2); //传统做法: System.out.println(p1.x + "," + p1.y); System.out.println(p2.x + "," + p2.y); System.out.println(p3.x + "," + p3.y); System.out.println(p4.x + "," + p4.y); System.out.println(p5.x + "," + p5.y); //利用toString System.out.println(p1);//自动调用toString System.out.println(p2); System.out.println(p3); System.out.println(p4); System.out.println(p5); } } /* * 平面坐标系中的一个点(x,y) * */ class Point{ int x, y; public Point(int x, int y) { this.x = x; this.y = y; } /** * 重写Object中的toString方法 * 返回Point的关键数据(x,y) */ public String toString(){ //返回Point对象的关键数据 return x +", "+ y; } }
package day02; /* * Object 提供了比较两个对象是否相等方法equals * * 1. 默认的equals不能比较对象中数据是否相等 * 建议子类重写这个方法! * 2. 重写时候, 按照关键数据比较两个对象是否相等 */ public class EqualsDemo01 { public static void main(String[] args) { /* * 如下两个对象, 不同的对象, 但是关键 * 数据是相同的. 是数据相等的对象 */ Point p1=new Point(3,4); Point p2=new Point(3,4); boolean b = p1.equals(p2); System.out.println(b); //false /* * 利用重写的equals方法比较两个对象相等 */ Cell c1 = new Cell(3,4); Cell c2 = new Cell(3,4); Cell c3 = new Cell(5,4); System.out.println(c1.equals(c2));//true System.out.println(c1.equals(c3));//false c3 = null; System.out.println(c1.equals(c3));//false //.... } } class Cell{ int row, col; public Cell(int row, int col) { this.row = row; this.col = col; } /* * 重写equals方法(修改父类的方法) * Cell c1 = new Cell(5,6); * Cell c2 = new Cell(5,6); * b = c1.equals(c2) * b = c1.equals("5,6") * b = c1.equals(c1); * Cell c3 = null; * b = c1.equals(c3); */ public boolean equals(Object obj){ //方法执行期间 this 是 当前对象引用 //obj是 另外一个对象的引用 //比较关键数据: 就是比较this(row,col) // 和 obj(row, col) 是否相等 if(obj==null){ return false; } if(this==obj){//对象自己和自己比较 return true;//性能好! } if(obj instanceof Cell){ Cell other=(Cell)obj; return this.row == other.row && this.col == other.col; } return false; } }
包装类概述
在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本数据类型转换为对象,
所有基本类型都有一个与之对应的类,即包装类 (wrapper)。
包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值,
包装类是fina|的,不能定义他们的子类。
基本类型 (字节) | 基本类型 | 父类 |
byte(1) | java.lang.Byte | java.lang.Number |
short(2) | java.lang.Short | java.lang.Number |
int(4) | java.lang.Integer | java.lang.Number |
long(8) | java.lang.Long | java.lang.Number |
float(4) | java.lang.Float | java.lang.Number |
double(8) | java.lang/Double | java.lang.Number |
char | java.lang.Character | java.lang.Object |
boolean | java.lang.Boolean | java.lang.Object |
自动装箱和拆箱
Java5.0版本以后加入到了autoboxing功能
·自动"拆箱"和"装箱'是依靠JDK5的编译器在编译期
的"预处理"工作
·下列代码写法均为正确形式:
lnteger a=100;/装箱
lnteger b=200;//装箱
lnteger c= a+b; //拆箱再装箱
doub|e d=c;//拆箱