Javaheima06


Java

正则表达式

概述

可以用一些规定的字符来制定规则,并用校验数据格式的合法性

String类的哪个方法可以与正则表达式进行匹配

public boolean matches(String regex);
//判断是否匹配正则表达式,匹配返回true,不匹配返回false

帮助文档搜索Pattern

校验 手机号 邮箱 电话号码(座机带区号)

package com.yu.SingleInstance;

import java.util.Scanner;

public class checkTest {
    public static void main(String[] args) {
//        checkIphone();
//        checkEmail();
        checkTel();
    }
    public static void checkTel(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要验证的电话号码?:");
        while (true) {
            if(sc.next().matches("0\\d{2,6}-?\\d{2,9}")){
                System.out.println("电话号码?格式正确!");
                break;
            }else{
                System.out.println("电话号码?格式有误!");
                System.out.println("请输入正确的的要验证的电话号码?:");
            }
        }
    }
    public static void checkEmail(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要验证的电子邮箱:");
        while (true) {
            if(sc.next().matches("[a-zA-Z0-9]{1,30}@[a-zA-Z0-9]{1,3}(\\.[a-zA-Z0-9]{1,3}){1,2}")){
                System.out.println("电子邮箱格式正确!");
                break;
            }else{
                System.out.println("电子邮箱格式有误!");
                System.out.println("请输入正确的的要验证的电子邮箱:");
            }
        }
    }
    public static void checkIphone(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要验证的手机号:");
        while (true) {
            if(sc.next().matches("1[3-9]\\d{9}")){
                System.out.println("手机号格式正确!");
                break;
            }else{
                System.out.println("手机号格式有误!");
                System.out.println("请输入正确的的要验证的手机号:");
            }
        }
    }

}

判断输入的金额

package com.yu.SingleInstance;

import java.util.Scanner;

public class moneyTest {
    public static void main(String[] args) {
        checkMoney();
    }
    public static void checkMoney(){
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入金额:");
            String s = scanner.next();
            if(s.matches("\\d{1,20}(\\.)?\\d{1,2}")){
                System.out.println("你输入的金额为:"+s);
                break;
            }else {
                System.out.println("输入格式有误!"+s);
            }
        }

    }
}

正则表达式在字符串方法的使用

方法名 说明
public String replaceAll(String regex,String newStr) 按照正则表达式匹配的内容进行替换
public String[] split(String regex) 按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组

选择排序

select sort

每轮选择当前位置,开始找出后面的较小值与该位置进行交换

package com.yu.SingleInstance;

import java.util.Arrays;

public class SelectSortTest {
    public static void main(String[] args) {
        int[] sort = {5,1,3,2};
        for (int i = 0; i sort[j]){
                        int a =sort[i];
                        sort[i]=sort[j];
                        sort[j]=a;
                    }
            }
        }
        System.out.println(Arrays.toString(sort));
    }
}

二分查找

  • 前提 : 必须排好序
  • 性能好
package com.yu.SingleInstance;

public class binarySearchTest {
    public static void main(String[] args) {
        int [] arr = {1,10,33, 44,66,99,101,200};
        binarySearch(arr,200);
    }
    public static int binarySearch(int[] arr,int data){
        int left = 0 ;
        int right = arr.length-1;
        while (left<=right){
            int a = (left+right)/2;
            if(arr[a]data){
                right = a - 1;
            }else{
                System.out.println("查询到了你要找的数字,它在数组的"+(a+1)+"位置.");
                return a;
            }

        }
            System.out.println("当前数组中没有你需要的值");
            return -1;
    }
}

实现步骤

  • 定义变量记录左右两边位置

  • 使用while循环控制查询(条件是左边位置<=右边位置)

  • 循环内获取中间元素索引

  • 判断当前要找的元素如果大于中间元素,左边位置=中间位置+1

  • 判断当前要找的元素如果小于中间元素,右边位置=中间位置-1

  • 判断当前要找的元素如果等于中间元素,返回当前中间元素索引

Lambda表达式

  • Lambda 表达式是JDK 8 开始的一种新语法形式

  • 作用 :简化匿名内部类的代码写法

  • Lambda表达式的简化格式

    • (匿名内部类被重写方法的形参列表)->{
          被重写方法的方法体代码.
      }
      注 :->是语法形式,无实际含义
      

注意: Lambda表达式只能简化函数式接口的匿名内部类的写法形式

说明是函数式接口

  • 首先必须是接口,其次接口中有且仅有一个抽象方法的形式
  • 通常我们会在接口上加一个@Functionlinterface注解,标记该接口必须是满足函数式接口

Lambda表达式的省略写法

  • 参数类型可以省略不写,
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
  • 如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!
  • 如果Lambda 表达式的方法体代码只有一行代码,可以省略大括号不写.此时, 如果这行代码是return语句,必须省略return不写,同时也必须生路";"不写

集合

概述

  • 集合和数组都是容器
数组

数组的特点

  • 数组定义完成并启动后,类型确定,长度固定.
  • 在进行增删数据操作是,数组是不太合适的,增删数据都需要放弃原有数组或移位.

数组使用场景

  • 当业务数据的个数固定,且都是同一批数据类型的时候,可以采取数组存储
集合

集合Java中存储对象数据的一种容器

特点

  • 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定,集合更像气球
  • 集合非常适合做约束的增删操作

注意: 集合中只能存储引用类型数据,如果要存储基本类型数据可以选用包装类

体系结构

  • 集合
    • Collection 单列
      • Collection单列集合,每个元素(数据)只包含一个值
    • Map 双列
      • Map双列集合,每个元素包含两个值(键值对)

注意:前期先掌握Collection集合体系的使用