java第十七天学习笔记

1.常见对象:Arrays类

1.1概述和使用(掌握)

A:Arrays类概述

针对数组进行操作的工具类。
提供了排序,查找等功能。

B.Arrays类方法使用:成员方法

public static String toString(int[] a)
public static void sort(int[] a)
public static int binarySearch(int[] a,int key)
static boolean equals(int[] a, int[] a2) 比较两个数组中的元素,是否一样
static int[] copyOf(int[] original, int newLength) 复制旧数组中的元素到一个新的数组中,新的数组长度是newLength 从0开始复制旧数组
static int[] copyOfRange(int[] original, int from, int to) 复制旧数组中的指定范围间的几个元素到新数组中 参数 from 起始索引 to终止索引 含头不含尾

1.2 Arrays类的源码解析(掌握)

A:源码解析
public static String toString(int[] a)
B:源码解析
public static int binarySearch(int[] a,int key)

1.3基本类型包装类的概述(掌握)

A: 需求:
	a:将100转换成二进制 , 八进制 , 十六进制
	b:判断一个数是否在int的范围内
B:为什么会有基本类型包装类
	为了对基本数据类型进行更多的操作,更方便的操作,java就针对每一种基本数据类型提供了对应的类类型.
C:常用操作:	常用的操作之一:用于基本数据类型与字符串之间的转换。
D:基本类型和包装类的对应
	byte 			Byte
	short			Short
	int			    Integer
	long			Long
	float			Float
	double		    Double
	char			Character
	boolean		    Boolean

1.4 nteger类的概述和构造方法(掌握)

A:Integer类概述
	通过JDK提供的API,查看Integer类的说明

	Integer 类在对象中包装了一个基本类型 int 的值,
	该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,
	还提供了处理 int 类型时非常有用的其他一些常量和方法
B:构造方法
	public Integer(int value)
	public Integer(String s)  //要个一个字面上是数字的字符串,如果不是就会报错
C:案例演示
	使用构造方法创建对象

1.5 String和int类型的相互转换(掌握)

A:int -- String
	a:和""进行拼接
	b:public static String valueOf(int i)
	c:int -- Integer -- String
	d:public static String toString(int i)
B:String -- int
	a:String -- Integer -- intValue();
	b:public static int parseInt(String s)
C:案例演示	
	String和int类型的相互转换

1.6 JDK5的新特性自动装箱和拆箱(掌握)

A:JDK5的新特性
	自动装箱:把基本类型转换为包装类类型
	自动拆箱:把包装类类型转换为基本类型
B:案例演示
	JDK5的新特性自动装箱和拆箱
	
	Integer ii = 100;
	ii += 200;
C:注意事项
	在使用时,Integer  x = null;代码就会出现NullPointerException。
	建议先判断是否为null,然后再使用。

1.7 Integer的面试题(掌握)

A:Integer的面试题
	看程序写结果
	
	Integer i1 = new Integer(127);
	Integer i2 = new Integer(127);
	System.out.println(i1 == i2);
	System.out.println(i1.equals(i2));
	System.out.println("-----------");

	Integer i3 = new Integer(128);
	Integer i4 = new Integer(128);
	System.out.println(i3 == i4);
	System.out.println(i3.equals(i4));
	System.out.println("-----------");

	Integer i5 = 128;
	Integer i6 = 128;
	System.out.println(i5 == i6);
	System.out.println(i5.equals(i6));
	System.out.println("-----------");

	Integer i7 = 127;
	Integer i8 = 127;
	System.out.println(i7 == i8);
	System.out.println(i7.equals(i8));

2.常见对象:正则表达式

2.1 正则表达式的概述和简单使用( 了解)
A:正则表达式:正确规则的表达式 规则java给我们定的
	是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
B:案例演示
	需求:校验qq号码.
		1:要求必须是5-15位数字
		2:0不能开头
		
	a:非正则表达式实现

	b:正则表达式实现 
	
	public static void main(String[] args) {
        //采用正则表达式的方式来校验
        // 1:要求必须是5 - 15 位数字
        //  2:0 不能开头
        //定义正则表单式  [1-9][0-9]{4,14} 正则表达式
        String regx = "[1-9][0-9]{4,14}";
   //手机的正则:
    //校验手机号的规则
    // 都是 1 开头  手机号是11位 每一位都是数字字符
    // 手机号的第二位 3 4 5 6 7 8 9

    String phoneRegx = "[1][3,4,5,6,7,8,9][0-9]{9}";
    boolean b = "13863969638".matches(phoneRegx);
    System.out.println(b);
      */
   //
   //正则表单式:正确规则的表达式,是一种独立的语法,作用:定义一些规则,用来对应数据进行规则的校验
    //很多语言都支持正则表达式。
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入你的QQ号");
    String qqNum = sc.nextLine();
    //对用户输入的qq号进行规则的校验
    //boolean b = checkQQNum(qqNum);
    boolean b = checkQQNum2(qqNum);
    if (b) {
        System.out.println("QQ号规则正确");
    } else {
        System.out.println("QQ号规则错误");
    }
}

private static boolean checkQQNum2(String qqNum) {
    //采用正则表达式的方式来校验
    // 1:要求必须是5 - 15 位数字
    //  2:0 不能开头
    //定义正则表单式  [1-9][0-9]{4,14} 正则表达式
    String regx="[1-9][0-9]{4,14}";
    //判断这个字符串,符不符合,我们定义的正则表达式
    boolean b = qqNum.matches(regx);
    return b;
}

private static boolean checkQQNum(String qqNum) {
    // 1:要求必须是5 - 15 位数字
    //  2:0 不能开头
    //校验长度
    //定义一个标记
    boolean flag = false;
    if (qqNum.length() >= 5 && qqNum.length() <= 15 && !qqNum.startsWith("0")) {
        //校验每一位是数字
        for (int i = 0; i < qqNum.length(); i++) {
            char ch = qqNum.charAt(i);
            //判断该字符是不是数字字符
            if (Character.isDigit(ch)) {
                flag = true;
            } else {
                flag=false;
                break;
            }
        }
    }
    return flag;
}
}


2.2正则表达式的组成规则(理解)

规则字符在java.util.regex Pattern类中
A:字符
	x 字符 x。举例:'a'表示字符a
	\\ 反斜线字符。
	\n 新行(换行)符 ('\u000A') 
	\r 回车符 ('\u000D')
B:字符类
	[abc] a、b 或 c(简单类) 
	[^abc] 任何字符,除了 a、b 或 c(否定) 
	[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) 
	[0-9] 0到9的字符都包括
C:预定义字符类
	. 任何字符。我的就是.字符本身,怎么表示呢? \.
	\d 数字:[0-9]
	\w 单词字符:[a-zA-Z_0-9]
		在正则表达式里面组成单词的东西必须有这些东西组成
	\s 匹配空格字符	
D:边界匹配器
	^ 行的开头 
	$ 行的结尾 
	\b 单词边界
		就是不是单词字符的地方。
		举例:hello world?haha;xixi
E:Greedy 数量词 
	X? X,一次或一次也没有 比如""空串 就是没有
	X* X,零次或多次  大于等于1次 都算多次
	X+ X,一次或多次
	X{n} X,恰好 n 次 
	X{n,} X,至少 n 次 
	X{n,m} X,至少 n 次,但是不超过 m 次

2.3正则表达式的判断功能(掌握)

A:正则表达式的判断功能
	String类的功能:public boolean matches(String regex)
B:案例演示:	判断手机号码是否满足规则
public static void main(String[] args) {
        //校验手机号的规则
        // 都是 1 开头  手机号是11位
        // 手机号的第二位 3 4 5 6 7 8 9
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的手机号");
        String phoneNum = sc.nextLine();
        //对用户输入的手机号进行规则的校验
        boolean b = checkPhoneNum(phoneNum);
        if (b) {
            System.out.println("手机号规则正确");
        } else {
            System.out.println("手机号规则错误");
        }
    }
private static boolean checkPhoneNum(String phoneNum) {
    //校验手机号的规则
    // 都是 1 开头  手机号是11位
    // 手机号的第二位 3 4 5 6 7 8 9
    boolean flag = false;
    if (phoneNum.length() == 11 && phoneNum.startsWith("13") || phoneNum.startsWith("14") || phoneNum.startsWith("15") || phoneNum.startsWith("16") || phoneNum.startsWith("17") || phoneNum.startsWith("18") || phoneNum.startsWith("19")) {
        //判断每一位是数字
        for (int i = 2; i < phoneNum.length(); i++) {
            char ch = phoneNum.charAt(i);
            if(Character.isDigit(ch)){
                flag=true;
            }else{
                flag=false;
                break;
            }
        }
    }
    return flag;
}

2.4校验用户邮箱是否满足要求(掌握)

A:案例演示:	需求:校验邮箱
  /*  A:
        案例演示:
        需求:校验邮箱*/
        //网易邮箱的规则
        //  6~18 个字符,可使用字母、数字、下划线,需要以字母开头
        String email = "[a-zA-Z]\\w{5,17}@163\\.com";
        boolean b = "westos_123ABC@163.com".matches(email);
        System.out.println(b);

        String email2 = "[a-zA-Z]\\w{5,17}@[a-z0-9]{2,12}\\.(com|net|cn|org)";
        boolean matches = "westos_123ABC@163.com".matches(email2);
        System.out.println(matches);

        //qq邮箱
        String emailQQ = "[1-9][0-9]{5,10}@qq\\.com";

        //正则表达式百度搜
        //省份证正则
        String sfz = "[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$|^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)";

        //车牌号的正则
        String car = "[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}";

        //判断中文的正则
                       //[\u4e00-\u9fa5]{0,10}
        String chinese="[\\u4e00-\\u9fa5]{2,10}";
        boolean matches1 = "沈员外".matches(chinese);
        System.out.println(matches1);
        //"^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$"
        String myEmail="^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$";

    }

2.5正则表达式的分割功能(掌握)

A:正则表达式的分割功能  split()方法
	String类的功能:public String[] split(String regex)
B:案例演示
	年龄范围"18-24"

2.6把给定字符串中的数字排序(掌握)

A:案例演示:	需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
  • 分析:
  • a: 定义目标字符串"91 27 46 38 50"
  • b: 对这个字符串进行切割,得到的就是一个字符串数组
  • c: 把b中的字符串数组转换成int类型的数组
  • (1): 定义一个int类型的数组,数组的长度就是字符串数组长度
  • (2): 遍历字符串数组,获取每一个元素.将其转换成int类型的数据
  • (3): 把int类型的数据添加到int类型的数组的指定位置
  • d: 排序
  • e: 创建一个StringBuilder对象,用来记录拼接的结果
  • f: 遍历int类型的数组, 将其每一个元素添加到StringBuilder对象中
  • g: 就是把StringBuilder转换成String
  • h: 输出

2.7正则表达式的替换功能(掌握)

A:正则表达式的替换功能
String类的功能:public String replaceAll(String regex,String replacement)
B:案例演示
论坛发表帖子,帖子中需要将数字替换为""
public static void main(String[] args) {
/
B:
案例演示
需求:校验qq号码.
1:要求必须是5 - 15 位数字
2:0 不能开头

public static void main(String[] args) {
        //定义正则表达式
        String regx = "[a]";  //
        //匹配列表中的任意一个字符
        regx = "[a,b,c,d]";
        regx = "[a,b,A,B,0,1,2,3]";
        //匹配26个字母
        regx = "[a-z]";
        regx = "[A-Z]";
        regx = "[0-9]";
        regx = "[a-zA-Z0-9]";
        //不是列表中的任意一个字符 ^取反的意思
        regx = "[^a-z]"; //不是小写字母就可以
        //匹配单个任意字符
        regx = ".";
        //匹配两个任意字符
        regx = "..";
        //只匹配点本身
        regx = "\\."; // \\转意字符
        regx = "|"; // | 或者
        regx = "\\|"; // 转意
        regx = "\\w";  //跟 [a-zA-Z_0-9] 一样
        regx = "\\W"; // 跟这个意思一样 [^\w]
        regx="\\d"; //跟[0-9]意思一样
         // \D 非数字:
        regx = "\\D";  // 跟 [^0 - 9] 意思一样
        regx="\\s"; //匹配空格字符
       // ? 表示 一次或一次也没有 比如 "" 空串 就是没有
        regx="a?b?";
        regx="[a-z]?";
        //* 零次或多次  大于等于1次 都算多次
        regx="a*";
        regx="[a-z0-9A-Z]*";
        // + 一次或多次
        regx="b+c+";
        regx="[a-zA-Z0-9]+";
        regx="a{3}"; //{3} 恰好3次
        regx="\\w{6}";//恰好6次
        regx="[0-9]{6,}"; //至少6次
        regx="[a-z0-9]{6,12}";// 小于等于12 大于等于6
        boolean b = "12345678999999999999999999".matches(regx)
        System.out.println(b);
    }
}
public static void main(String[] args) {
      /*  A:
        正则表达式的判断功能
        //判断一个字符串数据,符不符合,我们这个传入的正则表达式
        String类的功能:public boolean matches (String regex)
        B:
        案例演示:
        判断手机号码是否满足规则*/
public static void main(String[] args) {
      /*  A:
        正则表达式的分割功能 split () 方法
        String类的功能:public String[] split (String regex)
        B:
        案例演示
        年龄范围 "18-24"*/
        String name="张三=李四=王五";
        String s = name.substring(0, name.indexOf("="));
        System.out.println(s);
        String s1 = name.substring(name.indexOf("=")+1, name.lastIndexOf("="));
        System.out.println(s1);
        String s2 = name.substring(name.lastIndexOf("=") + 1);
        System.out.println(s2);

        System.out.println("===============================");
        //按照正则表达式,来分割字符串,获取到的内容,放到数组当中
        String[] strings = name.split("=");
        System.out.println(Arrays.toString(strings));

        String name2 = "张三=555asdfaasdfa李四=asdfasdfAFDFd66366王五=赵六";
        String[] strings1 = name2.split("[=0-9a-zA-Z]+");

        System.out.println(Arrays.toString(strings1));

    }