java学习---常用API、Lambda、常见算法

这篇博客介绍了Java中日期时间的处理,包括创建日期对象、获取时间毫秒值、格式化时间以及利用SimpleDateFormat进行日期格式化。此外,还讲解了正则表达式的使用,如验证QQ号码、手机号码和邮箱的合法性,并展示了Lambda表达式的概念和简化代码的示例。最后,提到了Arrays类在数组排序和搜索中的应用。
摘要由CSDN通过智能技术生成

常用API、Lambda、常见算法

学习大纲

在这里插入图片描述

日期与时间

data

在这里插入图片描述

代码使用

package com.peihj.date;

/*
* 学会用日期类处理时间,获取时间信息
* */

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        // 创建一个时间类获取系统此刻日期时间对象
        Date d = new Date();
        System.out.println(d);  // Sat Feb 12 13:34:18 CST 2022

        // 获取时间毫秒值
        long time = d.getTime();
        System.out.println(time);  // 1644644160693

        long time1 = System.currentTimeMillis();
        System.out.println(time1);  // 1644644160693
        
        
    }
}

案例说明

在这里插入图片描述
代码说明

package com.peihj.date;

/*
* 学会用日期类处理时间,获取时间信息
* */

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        // 创建一个时间类获取系统此刻日期时间对象
        Date d = new Date();
        System.out.println(d);  // Sat Feb 12 13:34:18 CST 2022


        long time2  = System.currentTimeMillis();
        time2 += (60*60 + 121)*1000;
        
        // 方法1
        Date d2 = new Date(time2);
        System.out.println(d2);
        
        // 方法2
        Date d3 = new Date();
        d3.setTime(time2);
        System.out.println(d3);
    }
}

在这里插入图片描述

小结

在这里插入图片描述

SimpleDateFormat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SimpleDateFormat的作用

在这里插入图片描述

格式化时间模板常用时间模板表达式如下

在这里插入图片描述

代码演示

package com.peihj.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Test2 {
    public static void main(String[] args) {
        // 创建日期对象
        Date d = new Date();
        System.out.println(d);

        System.out.println("================================");

        // 格式化日期对象按照我们想的形式输出
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
        String rs = sdf.format(d);
        System.out.println(rs);

        System.out.println("================================");

        // 格式化时间毫秒值
        // 需求:求121秒之后的时间是多少
        long times = System.currentTimeMillis() + 121 * 1000;
        String RS = sdf.format(times);
        System.out.println(RS);

    }
}

结果演示
在这里插入图片描述

解析字符串成为时间对象

在这里插入图片描述
代码演示

package com.peihj.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test3 {
    public static void main(String[] args) throws ParseException {
        // 目标:学会使用SimpleDateFormat 解析字符串成为日期对象
        // 有一个时间 2021年8月06日 11:11:11 往后 2天14小时49分06秒后的时间为多少
        // 1、把字符串拿到程序中来;
        String dataStr = " 2021年8月06日 11:11:11";
        // 2、把字符串解析成为日期对象:形式必须与字符串相同。否则解析失败
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月dd日 HH:mm:ss");

        Date d = sdf.parse(dataStr); // alt + enter  抛出异常
        System.out.println(d);   // Fri Aug 06 11:11:11 CST 2021

        // 3、往后 2天14小时49分06秒后的时间为多少
        long time = d.getTime() +(2L*24*60*60+14*60*60 + 49*60 + 6)*1000;
        String lasttime = sdf.format(time);
        System.out.println(lasttime);  // 2021年8月09日 02:00:17

    }
}

案例演示–秒杀活动

在这里插入图片描述

package com.peihj.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test4 {
    public static void main(String[] args) throws ParseException {
        // 开始时间与结束时间
        String starttime = "2021-11-11 00:00:00";
        String endtime = "2021-11-11 00:10:00";

        // 小贾,小皮
        String xiaojia = "2021-11-11 00:03:47";
        String xiaopi = "2021-11-11 00:10:11";

        // 解析时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = sdf.parse(starttime);
        Date d2 = sdf.parse(endtime);
        Date d3 = sdf.parse(xiaojia);
        Date d4 = sdf.parse(xiaopi);

        if (d3.after(d1) && d3.before(d2)){
            System.out.println("小贾秒杀成功");
        }else {
            System.out.println("小贾秒杀失败");
        }

        if (d4.after(d1) && d4.before(d2)){
            System.out.println("小皮秒杀成功");
        }else {
            System.out.println("小皮秒杀失败");
        }
    }
}

在这里插入图片描述

Canlendar

在这里插入图片描述
在这里插入图片描述

package com.peihj.date;

import java.util.Calendar;

public class test5 {
    public static void main(String[] args) {
        // 拿到系统此时的日历对象
        Calendar c = Calendar.getInstance();
        System.out.println(c);

        // 获取日历信息
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
    }
}

小结

在这里插入图片描述

包装类

在这里插入图片描述
在这里插入图片描述

代码演示

package com.peihj.date;

public class Test6 {
    public static void main(String[] args) {
        int a = 10;
        Integer a1 = 11;
        Integer a2 = a; // 自动装箱
        System.out.println(a2);

        Integer it = 100;
        int it1 = it; // 自动拆箱
        System.out.println(it1);

        double db = 99.5;
        double db1 = db;  // 自动装箱
        double db2 = db1; // 自动拆箱
        System.out.println(db2);

        // int age = null; // 报错
        Integer age = null;
        int age1 = 0;

        System.out.println("=====================");
        // 包装类可以把基本数据类型转换成字符串形式
        Integer k = 23;
        String rs = k.toString();  // 已经成为字符串了
        System.out.println(rs + 1); // 231

        String rs1 = Integer.toString(k);
        System.out.println(rs1+1);  // 231

        // 可以直接加字符串得到字符串类型
        String rs2 = k + "";
        System.out.println(rs2 +1 ); // 231

    }
}

package com.peihj.date;

public class test6 {
    public static void main(String[] args) {
        String NUM = "123";

        int age = Integer.valueOf(NUM);
        System.out.println(age + 1);  // 124

        String NUM1 = "99.9";
        double age1 = Double.valueOf(NUM1);
        System.out.println(age1+0.1);  // 100.0
    }
}

小结

在这里插入图片描述

正则表达式

正则表述

在这里插入图片描述
代码演示

package com.peihj.regexdemo;

import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
        // 需求:验证qq号码,必须全部是数字 6--20位
        while (true) {
            Scanner sc  = new Scanner(System.in);
            System.out.println("请输入qq:");
            String QQ = sc.next();
            System.out.println(checkqq(QQ));
        }


    }
    public static boolean checkqq(String qq){
        // 1、判断qq号长度
        if ((qq == null) || (qq.length() < 6 ) || (qq.length() > 20)){
            return false;
        }

        // 判断qq全部是否都是数字
        for (int i = 0; i < qq.length(); i++) {
            char ch = qq.charAt(i);
            if (ch < '0' || ch >'9'){
                return false;
            }
        }

        return true;
    }
}

package com.peihj.regexdemo;

import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
        // 需求:验证qq号码,必须全部是数字 6--20位
        while (true) {
            Scanner sc  = new Scanner(System.in);
            System.out.println("请输入qq:");
            String QQ = sc.next();
            System.out.println(CHECKQQ(QQ));
        }
    }
    public static boolean CHECKQQ(String qq){
        return qq != null && qq.matches("\\d{6,20}");
    }


    public static boolean checkqq(String qq){
        // 1、判断qq号长度
        if ((qq == null) || (qq.length() < 6 ) || (qq.length() > 20)){
            return false;
        }

        // 判断qq全部是否都是数字
        for (int i = 0; i < qq.length(); i++) {
            char ch = qq.charAt(i);
            if (ch < '0' || ch >'9'){
                return false;
            }
        }

        return true;
    }
}

结果演示
在这里插入图片描述

正则表达式使用详解

在这里插入图片描述

代码说明

package com.peihj.regexdemo;

public class test2 {
    public static void main(String[] args) {
        // 只能是a、b、c
        System.out.println("a".matches("[abc]")); // true
        System.out.println("b".matches("[abc]")); // true
        System.out.println("c".matches("[abc]"));  // true

        System.out.println("===================================");

        // 不能出现abc,只能验证单个字符
        System.out.println("a".matches("[^abc]")); // false
        System.out.println("b".matches("[^abc]")); // false
        System.out.println("c".matches("[^abc]"));  // false

        System.out.println("==================================");

        System.out.println("a".matches("\\d")); //只能是一个数字  false
        System.out.println("123".matches("\\d")); // false
        System.out.println("3".matches("\\d")); // true
        System.out.println("z".matches("\\w"));  //英文数字下划线 true
        System.out.println("3".matches("\\w")); // true
        System.out.println("_".matches("\\w")); // true
        System.out.println("-".matches("\\w")); // false

        System.out.println("你".matches("\\w")); // false
        System.out.println("你".matches("\\W")); // true 验证除了英文数字下划线之外的所有

        System.out.println("===================================");

        // 校验密码
        // 密码:必须是字母、数字、下划线,至少6位
        System.out.println("ssscd3c".matches("\\w{6,}")); // true
        System.out.println("ss3c".matches("\\w{6,}")); // false
        System.out.println("ssscd3cmm你好".matches("\\w{6,}")); // false

        System.out.println("===================================");
        // 验证码,数字、字母,必须是4位数
        System.out.println("25df".matches("[a-zA-Z0-9]{4}")); // true
        System.out.println("2_df".matches("[a-zA-Z0-9]{4}")); // false
        System.out.println("25d00f".matches("[a-zA-Z0-9]{4}")); // false

        System.out.println("23df".matches("[\\w&&[^_]]{4}")); // true
        System.out.println("23_f".matches("[\\w&&[^_]]{4}"));// false

    }
}

应用案例

在这里插入图片描述

package com.peihj.regexdemo;

import java.util.Scanner;

public class test3 {
    public static void main(String[] args) {
        // 目标:手机号码,邮箱,电话号码是否合法
        // checkphone();
        checkmail();

    }

    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 checkmail(){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请输入邮箱:");
            // 判断邮箱格式是否正确:328884415@qq.com
            // 判断邮箱格式是否正确:328884415@163.com
            // 判断邮箱格式是否正确:328884415@pci.com.cn
            String mail = sc.next();
            if (mail.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}\\.([a-zA-Z0-9]{2,20}){1,2}")){
                System.out.println("邮箱格式正确");

            }else {
                System.out.println("格式错误");
            }
        }

    }
}

小结

在这里插入图片描述

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

在这里插入图片描述

package com.peihj.regexdemo;

public class test4 {
    public static void main(String[] args) {
        String name = "小路nmsjaikk小样paksks迪奥oookks";

        String[] arr = name.split("\\w+");

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        String name2= name.replaceAll("\\w+"," ");
        System.out.println(name2);
    }
}

在这里插入图片描述

正则表达式爬取信息

在这里插入图片描述

package com.peihj.regexdemo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test5 {
    public static void main(String[] args) {
        String rs = "来黑马程序学习Java,电话020-43422424,或者联系邮箱" +
                "itcast@itcast.cn,电话18762832633,0203232323" + "邮箱bozai@itcast.cn,400-100-3233 ,4001003232";
        // 需求:从上面的内容中爬取出 电话号码和邮箱。
        // 1.定义爬取规则
        String regex = "(\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2})|" +
                "(1[3-9]\\d{9})|(0\\d{2,5}-?\\d{5,15})|400-?\\d{3,8}-?\\d{3,8}";
        // 2.编译正则表达式成为一个匹配规则对象
        Pattern pattern = Pattern.compile(regex);
        // 3.通过匹配规则对象得到一个匹配数据内容的匹配器对象
        Matcher matcher = pattern.matcher(rs);
        // 4.通过匹配器去内容中爬取出信息
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

在这里插入图片描述

arrays类

arrays类概述

在这里插入图片描述

代码演示

package com.peihj.arrays;

import java.util.Arrays;

public class test1 {
    public static void main(String[] args) {

        int[] arr = {10,20,5,25,13,4,50};
        System.out.println(arr);
        System.out.println("-------------------");
        System.out.println(Arrays.toString(arr));

        // 排序的Api
        Arrays.sort(arr);
        System.out.println("-----------------");
        System.out.println(Arrays.toString(arr));

        // 2分搜索技术
        System.out.println("-----------------");
        int index = Arrays.binarySearch(arr,10);
        int index1 = Arrays.binarySearch(arr,14);
        System.out.println(index);
        System.out.println(index1);
    }
}

在这里插入图片描述

Arrays类对于Comparator比较器的支持

在这里插入图片描述
代码说明

package com.peihj.arrays;

import java.util.Arrays;
import java.util.Comparator;

public class test2 {
    public static void main(String[] args) {
        int[] arr = {20,5,40,30,60,15};
        Arrays.sort(arr); //  默认升序排序
        System.out.println(Arrays.toString(arr));

        Integer[] arr1 = {34,12,15,8,45};

        Arrays.sort(arr1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                // 指定比较规则
//                if (o1 > o2){
//                    return 1;
//                }else if (o1 < o2){
//                    return -1;
//                }
//                return 0;
//                return o1-o2; // 默认升序
                return (o2-o1);
            }
        });
        System.out.println(Arrays.toString(arr1));
    }
}

在这里插入图片描述
对于不同的数组类型,同时数组内部有许多的不同元素,我们如何对数组进行排序

package com.peihj.arrays;

import java.util.Arrays;
import java.util.Comparator;

public class test3 {
    public static void main(String[] args) {
        student s1 = new student("小王",25,175.5);
        student s2 = new student("小明",15,185.5);
        student s3 = new student("小东",20,195.5);

        student[] s = {s1,s2,s3};

        for (int i = 0; i < s.length; i++) {
            System.out.println(s[i]);
        }

        System.out.println(Arrays.toString(s));
        Arrays.sort(s, new Comparator<student>() {
            @Override
            public int compare(student o1, student o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        System.out.println("-----------------");
        System.out.println(Arrays.toString(s));

    }
}

在这里插入图片描述
如果比较身高,不可以用加减法,用double.compare,因为身高是double类型,加减法结果有时候不对
在这里插入图片描述

常见的算法

冒泡排序

在这里插入图片描述

选择排序

在这里插入图片描述

二分查找

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

Lambda表达式

lambda概述

在这里插入图片描述
在这里插入图片描述

代码演示

package com.peihj.lambda;

public class test1 {
    public static void main(String[] args) {

        Swimming s = new Swimming() {
            @Override
            public void swim() {
                System.out.println("老师再游泳,游的快");
            }
        };
        
        go(s);
    }

    public static void go(Swimming swimming){
        System.out.println("开始");
        swimming.swim();
        System.out.println("结束");
    }

}

@FunctionalInterface
interface Swimming{
    void swim();
}

代码简化

package com.peihj.lambda;

public class test1 {
    public static void main(String[] args) {

        Swimming s = ()->  System.out.println("老师再游泳,游的快"); ;

        go(s);
    }

    public static void go(Swimming swimming){
        System.out.println("开始");
        swimming.swim();
        System.out.println("结束");
    }

}

@FunctionalInterface
interface Swimming{
    void swim();
}

在这里插入图片描述
案例2
简化前
在这里插入图片描述
简化后
在这里插入图片描述

Lambda实战-简化常见函数式接口

在这里插入图片描述
在这里插入图片描述

Lambda表达式的省略规则

在这里插入图片描述

参考

黑马程序员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peihj2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值