Java学习【知识点及代码9】

10.
10.1
Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法

Calendar(日历类) – 获取年,获取月,获取日,获取时,获取分,获取秒。
public int get(int field):返回给定日历字段的值

package com.edu.calendar;

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        /**
         * 创建对象:
         * 1.new 类名();
         * 2.有一些类是抽象类,他为我们提供了一个成员方法,而这个成员方法的返回值就是这个抽象类的子类对象
         * 
         *   Calendar(日历类)  --  获取年,获取月,获取日,获取时,获取分,获取秒。
             public int get(int field):返回给定日历字段的值
         */
        //public static Calendar getInstance()
        //使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间
        Calendar c = Calendar.getInstance();

        //获取年份
        System.out.println(c.get(Calendar.YEAR));

        //获取月份,注意值是从0-11月,我们想要显示的更加付给我们的阅读规则,就必须给月份加上1
        System.out.println(c.get(Calendar.MONTH)+1);

        //获取日期
        System.out.println(c.get(Calendar.DATE));

        //获取时
        System.out.println(c.get(Calendar.HOUR));

        //获取分
        System.out.println(c.get(Calendar.MINUTE));

        //获取秒数
        System.out.println(c.get(Calendar.SECOND));

        //使用字符串的拼接拼接成你想要的日期格式       
    }
}

10.2
需求:获取当前时间的5年后的3个月前的7天后。
public void add(int field,int amount):根据amount修改field的值
public void set(int year,int month,int date):设置当前日历的年月日

package com.edu.calendar;

import java.util.Calendar;

public class CalendarDemo2 {
    public static void main(String[] args) {
        /**
         *  10.2
              需求:获取当前时间的5年后的3个月前的7天后。
              public void add(int field,int amount):根据amount修改field的值
              public void set(int year,int month,int date):设置当前日历的年月日
         */
        //创建Calendar对象啊
        Calendar c = Calendar.getInstance();

/*      //需求:要给当前的日历时间加上5天
        c.add(Calendar.DATE, 5);
        //输出一下日期
        System.out.println(c.get(Calendar.DATE));

        //需求:将年份向前推一年
        c.add(Calendar.YEAR, -1);
        System.out.println(c.get(Calendar.YEAR));*/

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

        // public void set(int year,int month,int date):设置当前日历的年月日
        c.set(2016, 9, 9);
        System.out.println(c.get(Calendar.YEAR));
        System.out.println(c.get(Calendar.MONTH)+1);
        System.out.println(c.get(Calendar.DATE));   
    }
}

10.3
键盘录入年份,获取任意一年的二月有多少天

package com.edu.calendar;

import java.util.Calendar;
import java.util.Scanner;

public class CalendarTest {
    public static void main(String[] args) {
        // 10.3  键盘录入年份,获取任意一年的二月有多少天 
        /**
         * 1.获取年份
         * 2.将日历对象的时间调到,此年的3月的第一天
         * 3.将日期对象向前推一天
         * 4.获取此天的日期
         */
        System.out.println("请输入年份");

        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();

        // 2.将日历对象的时间调到,此年的3月的第一天
        Calendar c = Calendar.getInstance();
        c.set(year, 2, 1);

        //3.将日期对象向前推一天
        c.add(Calendar.DATE, -1);

        //4.获取此天的日期
        System.out.println("该年的二月有"+c.get(Calendar.DATE));

    }

}

11.正则表达式:
11.1
正则表达式:符合一定规则的字符串

案例:(用正则和代码两种方式实现)
键盘录入qq号码,校验QQ号码。
需求:
1:要求必须是5-15位数字
2:0不能开头

package com.edu.regex1;

import java.util.Scanner;

public class RegexDemo {
    public static void main(String[] args) {
        /**
         *   案例:(用正则和代码两种方式实现)
         键盘录入qq号码,校验QQ号码。
          需求:
                1:要求必须是5-15位数字
                2:0不能开头 

                分析:(封装一个方法,这个方法的返回值是布尔类型,参数就是qq号码)
                1.判断qq号码的长度,5-15位之间
                2.不能以0开头
                3.每一位的字符必须是数字
         */
        System.out.println("请输入你需要校验的qq号码");
        Scanner sc = new Scanner(System.in);
        String qq = sc.nextLine();

        //将获取到的qq号码传递给我这个方法
        //方式1:使用代码进行校验qq号码
        //System.out.println(isCheck(qq));

        //方式2:使用正则表达式校验qq号码
        System.out.println(isCheck2(qq));
    }

    private static boolean isCheck2(String qq) {
        //定义一个校验qq号码的正则表达式,这个正则表达式就是符合我的qq号码的校验规则的正杂表达式
        String reg = "[1-9][0-9]{4,14}";
        //使用正则表达式校验我的qq号码
        boolean flag = qq.matches(reg);
        return flag;
    }

    private static boolean isCheck(String qq) {
        //定义一个标记
        boolean flag = true;
        //在这里进行校验判断,但凡有一个条件不满足,就更该flag的值为false
        //1.判断qq号码的长度,5-15位之间
        if (qq.length()>=5&&qq.length()<=15) {
            //2.不能以0开头
            if (!qq.startsWith("0")) {
                //3.每一位的字符必须是数字
                char[] qqChs = qq.toCharArray();
                //遍历字符数组
                for (int i = 0; i < qqChs.length; i++) {
                    if (Character.isDigit(qqChs[i])) {

                    }else {
                        flag = false;
                    }
                }

            }else {
                flag = false;
            }

        }else {
            //更改flag的值
            flag = false;
        }

        return flag;
    }

}

11.2
规则字符在java.util.regex Pattern类中

A:字符
    x 字符x(举例:a,1)
    \\ 反斜线字符

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]


D:Greedy 数量词 
X? X,一次或一次也没有 
X* X,零次或多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超过 m 次  

结论:以后需要匹配的正则表达式怎么写呢?
答:不用写,直接网上百度

11.3
判断功能:
public boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
需求1:找出规则,写出正则(1[38][0-9]{9}),校验电话号码
13245678901 13332345678 13456789012 18812345678 18999999999
18666666666 18786868686

package com.edu.regex1;

public class RegexDemo2 {
    public static void main(String[] args) {
        String number = "13245678901";
        //正则表达式
        String reg = "1[38][0-9]{9}";
        //调用maches(String reg)进行判断指定字符串是否匹配指定的正则表达式
        boolean flag = number.matches(reg);
        System.out.println(flag);
    }
}

需求2:找出规则,写出正则(String reg = “[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,8}(\.[comnet]{2,3})+”),校验邮箱
sunmeng@163.com zhangsan@126.com lisi@sina.com wxd1221@sina.com.cn
csf@gmail.com 1512345@qq.com

package com.edu.regex1;

public class RegexDemo3 {
    public static void main(String[] args) {
        String email = "zhangsan@126.com";
        //写一个正则表达式验证这些个邮箱
        String reg = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,8}(\\.[comnet]{2,3})+";
        //依据正则表达式来验证上面的邮箱
        System.out.println(email.matches(reg));
    }
}

11.4
分割功能
public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
需求1:
分割如下字符串:
String s = “aa,bb,cc”;
String s2 = “aa.bb.cc”;
String s3 = “aa bb cc”;
String s4 = “aa bb cc”;
String s5 = “D:\baidu\20150826\day14”;

package com.edu.regex1;

public class RegexDemo4 {
    public static void main(String[] args) {
        // String s = "aa,bb,cc";
        //定以一个可以匹配到,的正则表达式
/*      String reg = ",";
        String s = "aa,bb,cc";
        //使用split(String reg)切割字符串
        String[] strs = s.split(reg);
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }*/

        System.out.println("----------------");
        /*String s2 = "aa.bb.cc";
        String reg = "\\.";
        String[] strs = s2.split(reg);
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }*/

        System.out.println("----------------");
/*      String s3 = "aa bb cc";
        String reg = " ";
        String[] strs = s3.split(reg);
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }*/

        System.out.println("----------------");
/*      String s4 = "aa    bb                     cc";
        String reg = " +";
        String[] strs = s4.split(reg);
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }*/
        System.out.println("----------------");
        String s5 = "D:\\baidu\\20160826\\day14";
        String reg = "\\\\";
        String[] strs = s5.split(reg);
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }
    }
}

需求2:
我有如下一个字符串:”91 27 46 38 50”
请写代码实现最终输出结果是:”27 38 46 50 91”

package com.edu.regex1;

import java.util.Arrays;

public class RegexDemo5 {
    public static void main(String[] args) {
        //切割字符串
        String s = "91 27 46 38 50";
        String reg = " ";
        String[] strs = s.split(reg);

        //遍历字符串数组,并定义一个int[]
        int[] arr = new int[strs.length];
        for (int i = 0; i < strs.length; i++) {
            arr[i] = Integer.parseInt(strs[i]);
        }

        //排序int[]
        Arrays.sort(arr);

        //遍历数组
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]+" ");
        }

        //将sb转换为String类型
        System.out.println(sb.toString());      
    }
}

11.5
替换功能
public String replaceAll(String regex,String replacement):把符合regex的用replacement替换
需求:字符串中的数字使用*代替

package com.edu.regex1;

public class RegexDemo6 {
    public static void main(String[] args) {
        String s = "我的银行卡号是:6102344354565";
        String reg = "[0-9]";
        String newStr = s.replaceAll(reg, "*");
        System.out.println(newStr);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值