Java_se(二)正则表达式、Object以及包装类

基本正则表达式

    

 正则表达式简介

        实际开发中,经常需要对字符串数据进行一些复杂的匹

配、查找、替换等操作。通过"正则表达式",可以

便的实现字符串的复杂操作。

        正则表达式是一串特定字符,组成一个"规则字符串"

这个"规则字符串"是描述文本规则的工具。正则表达

式就是记录文本规则的代码。

例如

    正则表达式:"[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;//拆箱











猜你喜欢

转载自blog.csdn.net/qq_41264674/article/details/80380545