正则表达式

1、基本正则表达式

  1. 正则表达式简介

·实际开发中,经常需要对字符串数据进行一些复杂的匹配、查找、替换等操作。通过“正则表达式”,可以方便的实现字符串的复杂操作。

·正则表达式是以串特定字符,组成一个“规则字符串”,这个“规则字符串”是描述文本规则的工具。正则表达式就是记录文本规则的代码

·例如:

   -正则表达式:“[a-z]”表示a到z的任意一个字符

   -正则表达式:“[a-z]+”表示由一个或多个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
X* 表示0个或者多个X
X+ 表示1个或者多个X
X{n} 表示n个X
X{n,} 表示n到任意多个X(大于等于n个X)
X{n,m} 表示n到m个X

·分组"()"

分组:()圆括号表示分组,可以将一系列正则表达式看做一个整体,分组时可以使用“|”表示“或”关系,例如匹配手机号码前面的分区:

//匹配手机号码前面的分区
	/**
	 * - +86可有可无
	 * - +86与后面的号码之间空格可以没有或者有多个
	 * - +电话号码为11位
	 */
	String regExp = "(\\+86|)?\\s?\\d{11}";

·"^"和"$"

   ·边界匹配

    - ^代表字符串开始

   - $代表字符串结束

·例如:匹配用户名规则-从头到尾连续8~10个单词字符

       /**
		 * 匹配用户名规则--从头到尾连续8~10个单词字符
		 *   -- \w{8,10}
		 *   -- ^\w{8,10}$
		 */
		String regExp1 = "\\w{8,10}";
		String regExp2 = "^\\w{8,10}$";
		String string = "abcd1234_er";
		System.out.println(string.matches(regExp1));
		System.out.println(string.matches(regExp2));

·split方法

   ·String的split方法可以将字符串按照特定的分隔符分成字符串数组

   

String[] split(String regex)

参数regex为正则表达式

以regex所表示的字符串为分隔符,将字符串拆分成字符串数组。

/**
	 * 测试split方法:将字符串按照regex表示的字符串为分隔符,将字符串拆分成字符串数组
	 */
	@Test
	public void testSplit() {
		String regex = "\\d";
		String string = "z 1 . +zhang 2 a1 31 4a";
		String[] string2 = string.split(regex);
		//Arrays中的toString方法返回所有元素,元素包含在[]内,各元素之间用","隔开
		System.out.println(Arrays.toString(string2));//[z ,  . +zhang ,  a,  , ,  , a]
	}

·replaceAll方法

String replaceAll(String regex,String replacement)

将字符串中匹配正则表达式的regex的字符串替换成replacement
    /**
	 * 测试正则表达式中的replaceAll方法
	 */
	@Test
	public void testReplaceAll() {
		//将str中放入所有数字替换成“数字”二字
		String string ="abc123bca34edg5678fgsg6780";
		String string2 = string.replaceAll("\\d", "数字");
		System.out.println(string2);//abc数字数字数字bca数字数字edg数字数字数字数字fgsg数字数字数字数字
	}

2、Object

2.1 Object

 Object ·在Java类继承结构中,java.lang.Object类位于顶端;
             如果定义一个java类时没有使用extends关键字声明父类,则其父类默认为java.lang.Object类
             Object类型的引用变量可以指向任何类型对象

2.2 toString方法
            如何重写toString方法
              ·Object类中重要的方法,用于返回对象值的字符串表示;
              ·原则上建议重写,格式大多数遵循"类的名字[域值]":eclipse已经集成 了生成toString的快捷方式
              ·如果不重写toString方法,将使用Object的toString方法,其逻辑为:
                    -类名@散列码
              ·toString是非常有用的调试工具
              ·JDK的标准类库中,许多类都定义了toString方法,方便用户获得有关对象状态的必要信息;
              ·强烈建议为自定义的每一类增加toString方法

2.3equals方法    
               equals方法
                  ·Object中的方法,作用在于检测一个对象是否等于另一个对象
                  ·在Object类中,这个方法判断两个对象是否具有相同的引用,即是否为相同的对象;
                  ·在实际应用中,一般需要重写该方法,通过比较对象的成员属性,使该方法更有意义,例如:对于Cells
                    如果 不重写该方法,下面代码在cell1和cell2指向同一个对象时才为true,可以将其写为:当x和y坐标相等时
                    两个对象即相等,这样更有意义一些
              equals和==的区别
                  ·==用于比较变量的值,可以应用任意类型,如果应用于引用类型,则比较的是两个引用变量
                   中存储的值(地址信息),判断两个变量是否指向相同的对象
                  ·equals是Object的方法,重写以后,可以用于判断两个对象的内容是否相等
                  ·需要注意的是,Object默认的equals方法的比较规则同==
    
    

@Test
	public void testEquals() {
		
		//String中重写equals方法,用于判断两个字符串对象的字符序列是否相等
		//也就是比较两个字符串的内容是否相等
		String string = "abc";
		String string2 = "abc";
		String  string3 = new String("abc");
		String string4 = new String("abc");
		System.out.println(string.equals(string2));
		System.out.println(string == string2);
		System.out.println(string.equals(string3));
		System.out.println(string == string3);
		System.out.println(string3.equals(string4));
		System.out.println(string3 == string4);
		System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
		//Object中的equals方法
		Tester tester1= new Tester(4);
		Tester tester3 = tester1;
		Tester tester2 = new Tester(4);
		System.out.println(tester1.equals(tester3));//true
		//因为此时该类未重写equals方法,所以调用的是Object类中的equals方法
		//所以此时equals作用同==一样,均比较两个对象是否为同一个对象,而不是比较两个对象属性值相等
		System.out.println(tester1.equals(tester2));//false
		System.out.println(tester1 == tester2);//false
		
	}
	

3、包装类

          1、包装类概述

  ·在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本数据类型转换为对象
               ·所有基本类型都有一个与之对应的类,即为包装类(wapper)
                包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值;
                包装类是final的,不允许继承

2、8种基本数据类型包装类

·Number及其主要方法
               ·抽象类Number是Byte、Short、Inteager、Long、Float、Double类的父类
               ·Number的子类必须实现将表示的数值转换为byte,double,float,int,long,short
            的方法:
                    -doubleValue() 以double的形式返回指定的数值
                   -intValue() 以int的形式返回指定的数值
                   -float() 以float的形式返回指定的数值;
    
    

/**
	 * 测试Number的intValue方法和doubleValue方法
	 */
	@Test
	public void testIntValueAndDoubleValue() {
		Number d = 12.34;
		Number n = 123;
		//输出d和n对象所属的类型
		System.out.println(d.getClass().getName());//java.lang.Double
		System.out.println(n.getClass().getName());//java.lang.Integer
		
		//将n转换成基本数据类型int,将d转换成基本数据类型double
		int intValue = n.intValue();
		Double doubleValue= d.doubleValue();
		System.out.println("intValue:"+intValue+",doubleValue:"+doubleValue);
		
		//将n转换成基本数据类型int,将n转换成基本数据类型double
		intValue = n.intValue();
		doubleValue = n.doubleValue();
		System.out.println("intValue:"+intValue+",doubleValue:"+doubleValue);
		
		//将d转换成基本数据类型int,将d转换成基本数据类型double
		intValue = d.intValue();
		doubleValue = d.doubleValue();
		System.out.println("intValue:"+intValue+",doubleValue:"+doubleValue);
	}
	

          3、Integer常用功能

/**
	 * Integer常用功能
	 *	·该类提供了多个方法,能在int类型和String类型之间相互转换
	 */
	@Test
	public void testInteager() {
		String str = "123";
		int value = Integer.parseInt(str);
		System.out.println(value);//123
		//如果字符串的格式不是整数形式,将无法转换
		str = "中国加油";
		value = Integer.parseInt(str);
		//会抛出异常 NumberFormatException
//		System.out.println(value);
	}

        4、Double常用功能

/**
	 * Double常用功能
	 * 	·在double类的对象中包装一个基本类型double的值
	 * 	·构造方法
	 * 		- Double(double value)
	 * 		- Double(String s)
	 * 	·方法
	 * 		- double doubleValue() 返回此Double对象的double值
	 * 		- static double parseDouble(String s)返回一个新的double值,该值被初始化为用指定的String表示的值
	 * 
	 */
	@Test
	public void testDouble() {
		String string = "12345.88";
		double d = Double.parseDouble(string);
		
		Double double1 = new Double(123.11);
		d = double1.doubleValue();
	}

        5、自动装箱和拆箱

/**
	 * 自动装箱和拆箱
	 * 
	 * 装箱和拆箱是依靠jdk5的编译器在编译期的“预处理”工作
	 * 装箱:基本数据类型--》包装类
	 * 拆箱:包装类--》基本数据类型
	 * 
	 * 装箱和拆箱是编译器认可的,不是虚拟机,编译器在生成类的字节码时加入必要的方法调用
	 * -Integer a = 100 -->Integer a =Inteager.valueOf(100)
	 */
	@Test
	public void testAutoBoxing() {
		Integer a = 12;//装箱:-Integer a = 100 -->Integer a =Inteager.valueOf(12)
		Integer b = 13;//装箱:-Integer b = 100 -->Integer b =Inteager.valueOf(13)
		//Integer c = a+b-->Integer c =Inteager.valueOf(a.intValue()+b.intValue())
		Integer c = a+b;//拆箱后再装箱
		double d = c;//拆箱:int d = c.intVAlue()
		
	}

 

你可能感兴趣的:(Java)