day8-java基础(正则表达式、date类型、包装类)

1. Date 日期

        千万别写错: Data 数据

        主要是在 java.util.Date 包
        另外还有一个 java.sql.Date 包,暂时不用。

         初始化的时候:new Date() 可以获取当下的时间。
        getTime() 获取从 1970年1月1日到现在为止的毫秒值,类型 long
        toString() 主要是将 Date 对象转换为字符串。

2. DateFormat 日期格式转换器

        java.text.Format

        constant 常量
        final 最终值

3. SimpleDateFormat

         java.text.SimpleDateFormat

@Test
    public void test(){
        
        // dateFn();
        // dateFormatFn();
        // dateFormatFn2();
        dateFormatFn3();
        
    }
    
    public void dateFormatFn3(){
        
        String str = DateUtil.getDate(new Date());
        
        System.out.println(str);
    }
    
    public void dateFormatFn2(){
        
        // 1. 设置格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
        // 2. 创建 Date
        Date date = new Date();
        // 3. 如果子类中没有对应可用的方法,可以直接去父类中查找使用
        String dateStr = sdf.format(date);
        
        System.out.println(dateStr);
        
    }
        
    
    public void dateFormatFn(){
        
        // 1. 创建 Date
        Date date = new Date();
        
        // 2. 创建 DateFomat
        // 不支持直接 new 
        // DateFormat df = new DateFormat();
        DateFormat df = DateFormat.getInstance();
        
        String dateStr = df.format(date);
        // 18-9-12 上午11:26
        System.out.println(dateStr);
    }
    
    public void dateFn(){
        
        Date date = new Date();
        // Wed Sep 12 11:15:20 CST 2018
        System.out.println(date);
        
        // 获取从 1970-1-1 到现在的毫秒值
        long date2 = date.getTime();
        // 15367 2221 2946
        System.out.println(date2);
    }
    
    
}

封装类:将日期转换成字符串

public class DateUtil {
    
    public static String getDate(Date date){
        
        if(date != null){
            
            // 1. 设置格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
            // 2. 如果子类中没有对应可用的方法,可以直接去父类中查找使用
            return sdf.format(date);
        }
        
        return null;
    }

}

求自己活了多少天了

public class Demo2 {
    
    // add​(int field, int amount):根据日历规则,为已给定的日历字段增加或者减少时间量。
    // Adds or subtracts 增加或者减少  the specified 指定的  amount of time 时间量
    // to the given calendar field,  已经给出来的日历字段
    // based on the calendar's rules.  基于日历规则
    
    // 注意点中重点: 西方月份定义:0-11,星期的定义:日-六 
    
    // 1. 求自己已经活了多少天了?     XX 岁 XX 个月大 零 XX 天
    // 2. 求距离 2020-8-8日还有多少天?   高考
    
    
    
    @Test
    public void test(){
        
        // CalendarFn1();
        // CalendarFn2();
        // CalendarFn3();
        
        tiFn();
    }
    
    // 1. 求自己已经活了多少天了?     XX 岁 XX 个月大 零 XX 天
    public void tiFn(){
        
        // 1. 获取当前的时间对应的天数
        Calendar currentDate = Calendar.getInstance();
        Calendar birthDate = Calendar.getInstance();
        
        // 2. 获取出生时对应的天数
        // 设置出生日期:1999-8-8   2018-4-12      月份的公式:(12 + 当前月份 - 出生时月份)  yyyy-MM-dd
        birthDate.set(Calendar.YEAR, 1999);
        birthDate.set(Calendar.MONTH, 8);
        birthDate.set(Calendar.DATE, 8);
        
        // 3. 减法
        // 年份
        int cYear = currentDate.get(Calendar.YEAR);
        int mYear = birthDate.get(Calendar.YEAR);
        // 总年份
        int totalYear = cYear - mYear;  
        // 月份
        int cMonth = currentDate.get(Calendar.MONTH);
        int mMonth = birthDate.get(Calendar.MONTH);
        // 总月份
        // int totalMonth = (12 + cMonth - mMonth) + (cYear - mYear)*12 - 12;
        int totalMonth = (12 + cMonth - mMonth) + totalYear * 12 - 12;
        
        // 获取当前的天数
        int cDate = currentDate.get(Calendar.DATE);
        int mDate = birthDate.get(Calendar.DATE);
        // 总天数
        // int totalDay = ((12 + cMonth - mMonth) + (cYear - mYear)*12 - 12) * 30;
        int totalDay = totalMonth * 30;
        
        System.out.println("到现在为止,活了"+ totalDay +"天了");
        
    }
    
    
    public void CalendarFn3(){
        
        // 创建 calendar 实例
        Calendar c = Calendar.getInstance();
        
        // 2088-10-12
        c.set(Calendar.YEAR, 2088);
        c.set(Calendar.MONTH, 10);
        c.set(Calendar.DATE, 12);
        
        System.out.println(c);
    }
    
    public void CalendarFn2(){
        
        // 创建 calendar 实例
        Calendar c = Calendar.getInstance();
        
        // 2018-9-12 --> 17
        c.add(Calendar.DATE, 5);
        
        // 单独获取 c 则是全部的数据
        // 可以通过指定的 DAY_OF_MONTH 字段来获取日的数据。
        System.out.println(c.get(Calendar.DAY_OF_MONTH));
        
    }
    
    public void CalendarFn1(){
        
        // 创建 calendar 实例
        Calendar c = Calendar.getInstance();
        
        // 获取年份
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
        
        // 这个月的第几周
        System.out.println("这个月:" + c.get(Calendar.WEEK_OF_MONTH));
        
        // 今年的第几周
        System.out.println("今年:" + c.get(Calendar.WEEK_OF_YEAR));
        
        
    }
    
    public void hello() throws Exception{
        
        // 1. 设置一个日期格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        // 2. 设置出生日期和当前日期
        Date firstDate = format.parse("1999-8-8");
        Date endDate = format.parse("2018-9-12");
        // 3. 初始化 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        // 4. 将出生日期加入到 Calendar 实例中
        calendar.setTime(firstDate);
        // 5. 设置旗标值,用于循环迭加
        int cnt = 0;
        // 6. compareTo() 接收两个 Calendar 对象值
        // 将传入的时间,直接转换成毫秒值(从 1970-1-1开始) 然后可以进行比较
        // 如果两个值相减时得到 0 则时同一时间,否则就是两者之差
        // 如果直接采用这种方式,性能非常不好
        while(calendar.getTime().compareTo(endDate) != 0) {
            
            // 每次给开始时间去加1天(下面的1单位是天),直到天数加上来等于给定的结束时间为止,
            // 循环将不再成立,结束循环
            calendar.add(Calendar.DATE, 1);
            cnt++;
        }

        System.out.println("您活了:" + cnt + "天");
    }

}

4.正则表达式

        下面出现的 X 代表的是随便一个字符。

        1. X:要求必须匹配指定的字符。 a --> "a"
        2. \:代表 \ 斜杠。
        3. \t:相当于 tab 键,制表符。
        4. \n:相当于回车键,换行。
        5. \r:相当于回车键,换行。

        6. [abc]:接收的内容,只能是指定字符中之一。
        7. [^abc]:接收的内容,是除了指定的其他所有值。
        8. [a-zA-Z]:指的是全部大小写字母。
        9. [0-9]:指所有的数字。
        10.[a-zA-Z0-9]:指的是所有的字母和数字。

        1. 用小实心圆点 . 来表示所有的字符。 . 但书写的时候需要 \.
        12. \d:指 0-9 的数字。
        13. \w:指的是 [a-zA-Z0-9_]中的值。
        14. ^ 开头,结尾:^[abc][0-9]
        15. \b:单词边界。 \b[abc]\b 指的是 a、b、c 三个字母左右两边的值都是 [a-zA-Z0-9] 范围的。

        16. X?:出现一次或者一次都没有。
        17. X*:出现零次或者多次。
        18. X+:出现一次或者多次。
        19. X{n}:恰好出现 n 次。
         20. X{n,}:至少出现 n 次。
         21. X{n, m}:至少出现 n 次,但不超过 m 次。

验证邮箱1:

public void email(){
        
        // String email = "zsfz_053@126.com";
        // String regrex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z_0-9]+)";
        
        String email = "hello@sina.com.cn";
        String regrex = "\\w+@\\w+(\\.\\w+)+";
                
        System.out.println(email.matches(regrex));
    }

验证邮箱2:

public void regrex(){
        String email = "12345-6@qq.com";
        String regrex = "[\\w-_]{6,18}@[\\w]*\\.[comn]*";
        boolean b =  email.matches(regrex);
        System.out.println(b);
    };

5.包装类

        包装类

        我们以前用的 int、char、double、float、boolean、short、byte 等都是基本数据类型。
        在 Java 开发中尽量少用基本数据类型,多用包装类型。
        针对基本数据类型进行升级,Java 提供多个包装类:
        Integer、Character、Double、Float、Boolean、Short、Byte,引用数据类型,有内存地址。
        包装类型,可以让开发者以面向对象的思维来操作,而且提供了很多的方法来实现功能。

        转换方法:
        1. compareTo​(Integer anotherInteger):将两个 Integer 值来做运算(减法)
        2. parseInt​(String s):将 String 转 int,字符串中只能是数值才能转。
        3. intValue():将 Integer 以 int 类型返回。
        4. valueOf(int):将 int 转成 Integer。
        5. valueOf(String):将 String 转成 Integer。

        比较:
        max​(int a, int b):返回两者中最大值。
        min​(int a, int b):返回两者中最小值。


6.math()方法

public class Demo {
    
    @Test
    public void test(){
        
        // 1. 四舍五入
        System.out.println(Math.round(3.17));
        
        // 2. 向上取整
        System.out.println(Math.ceil(3.24));
        
        // 3. 向下取整
        System.out.println(Math.floor(3.84));
        
        // 4. 最大值
        System.out.println(Math.max(5, 6));
        
        // 5. 最小值
        System.out.println(Math.min(5, 6));
        
        // 6. 绝对值
        System.out.println(Math.abs(-7));
        System.out.println(Math.abs(-7.34));
        
        // 7. xx的多少次幂
        System.out.println(Math.pow(5, 6));
        
        // 8. 随机数:0.0-1.0
        System.out.println(Math.random());
    
    }
}

7.Arrays数组

public class Demo {

    @Test
    public void test() {
        
        // 找到班里考试分数最低的三个
        int[] aa = {73, 97, 24, 33, 65, 45, 99};
        
        // 排序
        Arrays.sort(aa);
        
        // 新建一个数组存储值
        int[] i = new int[3];
        
        for (int j = 0; j < i.length; j++) {
            
            i[j] = aa[j];
        }
        
        System.out.println(Arrays.toString(i));
        

    }

    public void ArraysFn() {

        // sort:排序(小到大)
        int[] aa = { 23, 33, 5, 12, 88, 34, 25 };
        // Arrays.sort(aa);

        for (int i : aa) {
            System.out.print(i + ",");
        }

        // toString() 将数据以字符串返回
        String str = Arrays.toString(aa);
        System.out.println(str);

        // 二分法: return index of the search key, 返回要找的内容对应下标值
        int index = Arrays.binarySearch(aa, 12);
        System.out.println(index);
    }
}

8.BigDecimal

public class BigDecimalTest {
    
    @Test
    public void test(){
        
        System.out.println(0.09 + 0.02222222); // 0.11
        System.out.println(1.0 - 0.44); // 0.56
        System.out.println(1.304 * 100); // 130.4
        System.out.println(1.304 / 100); // 0.013040000000000001
        
        BigDecimal a = new BigDecimal(1.0);
        BigDecimal b = new BigDecimal(0.44);
        // BigDecimal c = a.add(b);
        BigDecimal c = a.subtract(b);
        System.out.println(1.0 + 0.44);
        System.out.println(c);
    }

}

9.list集合

public class Demo {

    // List 集合

    // 相当于一个容器,跟数组是类似的,用于存储数据。
    // 数组不能动态变化长度,来添加数据,但集合可以。

    // List 接口
    // 1. 存储的值是有序排列的。
    // 2. 值是允许重复的。
    // 3. 可以通过索引寻找。

    // 需要掌握的实现类:ArrayList、LinkedList

    // 增加数据:
    // add() 在尾部追加
    // add(index, element) 指定位置加
    // 删除删除
    // remove​(index) 通过下标值来删除
    // remove(Object) 直接删掉指定对象
    // 替换数据
    // set​(index, element) 在指定的位置设置内容
    // 查找数据
    // get​(index) 根据下标值获取对象

    @Test
    public void test() {

        listIteratorFn();
    }

    public void listIteratorFn(){
        // 创建一个 ArrayList 对象
        ArrayList<String> arrList = new ArrayList<>();
        // 添加值
        arrList.add("cuihua");
        arrList.add("chunhua");
        arrList.add("hehua");

        // 获取  ListIterator 迭加器,访问数据。
        ListIterator<String> itStr = arrList.listIterator();
        
        // hasNext() 判断下面是否有数据,指针还没动的时候
        while (itStr.hasNext()) {
            
            // 就让指针移动,然后获取对应的值到 迭加器 中。
            String aa = itStr.next();

            // 看是否最后一个值,如果是的话,我想追加一个新值
            if ("chunhua".equals(aa)) {
                // 将一个新值,加到 叠加器 中
                itStr.add("hello");   
            }
        }
        System.out.println(arrList.toString());
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,079评论 1 44
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 文/张无病 -1- “我是一位大四学生,我喜欢手工。尽管在中国手工这条路太难走,但是在大四实习期我选择了坚持。在外...
    雨炼阅读 499评论 2 4
  • 琳琅菁选:有没有想过,到木工坊做一把自己的椅子? 像陶艺、油画兴趣教室的曾经流行一样,现在人们又玩起了木工坊。设计...
    琳琅leanlong阅读 1,317评论 0 3