java——正则表达式,Arrays类,选择排序,二分搜索

正则表达式
正则表达式可以用一些规则的字符来制定规则,并用来校验数据格式的合法性(判断格式 )
在这里插入图片描述
用正则表达式完成如下需求

  1. 请编写程序模拟用户输入手机号码、验证格式正确,并给出提示,知道格式输入正确为止
  2. 请编写程序模拟用户输入邮箱号码、验证格式正确,并给出提示,知道格式输入正确为止
  3. 请编写程序模拟用户输入电话号码、验证格式正确,并给出提示,知道格式输入正确为止
public class RegexTest3 {
    //目标:校验 手机号码 邮箱 电话号码
    public static void main(String[] args) {

        checkPhone();
        checkEmail();
        checkTel();
    }

    private static void checkTel() {
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("请输入您的电话号码");
            String phone=sc.next();
            if(phone.matches("0\\{2,6}-?\\d{5,20}")){
                System.out.println("电话格式正确,注册完成!");
                break;
            }else{
                System.out.println("格式有误");
            }
        }
    }

    public static void checkPhone(){
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("请输入您的手机号码");
            String phone=sc.next();
            if(phone.matches("1[3-9]\\d{9}")){
                System.out.println("手机格式正确,注册完成!");
                break;
            }else{
                System.out.println("格式有误");
            }
        }

    }
    public static void checkEmail(){
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("请输入您的注册邮箱");
            String phone=sc.next();
            if(phone.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}\\.([a-zA-Z0-9]{2,10}){1,2}")){
                System.out.println("邮箱格式正确,注册完成!");
                break;
            }else{
                System.out.println("格式有误");
            }
        }

    }

}


在这里插入图片描述
分割字符串

public class RegexTest3 {
    //目标:分割字符串,用数组来存储
    public static void main(String[] args) {
        String names="小路adhaks33蓉儿dasdj89姐姐";
        String[] arrs=names.split("w+");
        for(int i=0;i< arrs.length;i++){
            System.out.println(arrs[i]);
        }
        String name2=names.replaceAll("\\w+","   ");
        System.out.println(name2);
    }


}


正则表达式爬取信息

public class RegexTest3 {
    public static void main(String[] args) {
        String rs="自律起来学习java,电话020-43422424,或者联系邮箱"+
                "itcast@itcast.cn,电话18762832633,020322323"+
                "邮箱bozai@itcast.cn.400-100-233,4001003232";
        //去求:从上面的内容爬取出电话号码和邮箱
        //1.定义爬取规则
        String regex="(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})|(1[3-9]\\d{9})" +
                "|(0\\d{2,6}-?\\d{5,20})|(400-?\\d{3,9}-?\\d{3,9})";
        //2,把这个爬取规则编译成匹配对象
        Pattern pattern=Pattern.compile(regex);
        //3.得到一个内容匹配其对象
        Matcher matcher=pattern.matcher(rs);
        //4.开始找了
        while (matcher.find()){
            String rs1=matcher.group();
            System.out.println(rs1);
        }
    }


}


Arrays类概述
数组操作工具类,专门用于操作数组元素的
在这里插入图片描述
数组的常见操作

public class ArraysDemo01 {
    public static void main(String[] args) {
        int[] arr={10,2,55,23,24,100};
        System.out.println(arr);
        //1.返回数组内容的tostring(数组)
        String rs= Arrays.toString(arr);
        System.out.println(rs);
        System.out.println(Arrays.toString(arr));
        //2.排序的API(默认自动对数组元素进行升序排序)
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        //3.二分搜索技术(前提必须排好序才支持,否则出bug )
        int index1=Arrays.binarySearch(arr,55);
        System.out.println(index1);
        int index2=Arrays.binarySearch(arr,3);
        System.out.println(index2);//-2
        //返回不存在的元素的规律:-(应该插入的位置索引+1)
        int index3=Arrays.binarySearch(arr,22);
        //需求:降序排序!(自定义比较器对象,只能支持引用类型的排序!!
        Integer[] ages1={34,12,42,23};
    }

}

常见算法

选择排序

  • 每轮选择当前位置,开始找出后面的较小值与该位置交换(每次交换可以至少确定一个位置)
    选择排序的关键
  • 确定总共需要选择几轮:数组的长度-1
  • 控制每轮从一千的位置为基准,与后面元素选择几次
    在这里插入图片描述
public class Test {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr={5,1,3,2,6};
        //排序次数 数组长度-1
        for(int i=0;i<arr.length-1;i++){
            boolean flag=false;
            //数组遍历
            for(int j=i+1;j<arr.length;j++){
                //交换
                //如果有比当前位数据更小的,则交换
                if(arr[i]>arr[j]){
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                    flag=true;
                }
            }
            if(flag==false)
                break;
            System.out.println("第"+(i+1)+"轮:"+ Arrays.toString(arr));

        }

    }
}

二分查找
为什么要二分查找:应为再数据量特别大的时候,基本查找从前往后寻找的性能是很差的
二分查找的性能号,二分查找的前提是必须要排号数据
在这里插入图片描述
二分朝朝正常的检索条件应该是开始位置min<=结束位置max

public class Test {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr={10,14,16,25,28,30,35,88,100};
        binarySearch(arr,35);
    }

    /**
     * 二分查找算法的实现
     * @param arr 排序数组
     * @param data 要找的数据
     * @return 索引如果元素不存在,直接返回-1
     */
    private static int binarySearch(int[] arr,int data) {
        //1.定义左边位置和右边为hi
        int left = 0;
        int right = arr.length - 1;
        //2.开始循环,折半查询
        while (left <= right) {
            //取中间索引
            int middleIndex = (left + right) / 2;
            //3.判断当前中间位置的元素要和要找的元素的大小情况
            if (data > arr[middleIndex]) {
                //往右边找,左边位置更新位=中间索引+1
                left = middleIndex + 1;
            } else if (data < arr[middleIndex]) {
                //往左边找,左边位置=中间索引-1
                right = middleIndex - 1;

            } else {
                return middleIndex;
            }
        }
        return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值