Day14 --正则表达式 Math类 Random类 System类 BigInteger类 BigDecimal类 Date类 Calendar类

 a.
    正则表达式
        概述    
            是一种描述或匹配一系列符合某个语法规则的字符串的单个字符串,就是一种规则,有自己特殊的应用。
        作用
            比如注册邮箱,用户名或密码,用于限制长度及格式,这种限制的事情就是用正则表达式来做的。
        案例演示
            * 需求:校验qq号码.
                * 1:要求必须是5-15位数字
                * 2:0不能开头
                * 3:必须都是数字
                
            * a:非正则表达式实现
            * b:正则表达式实现                


b.
        字符类:
            [] 表示单个字符的匹配。
                [abc] a、b 或 c(简单类) 
                [^abc] 任何字符,除了 a、b 或 c(否定) 
                [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
                [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
                [a-z&&[def]] d、e 或 f(交集)  相当于 [def]
                [a-z&&[^bc]]  a 到 z,除了 b 和 c:[ad-z](减去) 
                [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) 


        预定义字符类: 
            预定义字符类: 
            . 任何单个字符(与行结束符可能匹配也可能不匹配) 
            .. 任意两个字符
            \d 单个数字:[0-9] 
            \D 单个非数字: [^0-9] 
            \s 单个空白字符:[ \t\n\x0B\f\r] 
            \S 单个非空白字符:[^\s] 
            \w 单词字符:[a-zA-Z_0-9]     System.out.println("_".matches(regex7)); //true
            \W 非单词字符:[^\w]             System.out.println("_".matches(regex7)); //false
        注意:单个\ 表示转义字符,如果想表示\d的话,就要使用两个\\ 即\\d 其他的也是这样。


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


c.
    正则表达式的分割功能
        * String类的功能: public String[] split(String regex);
        
     给定字符串中的数字排序
        * 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
    
    正则表达式的替换功能
        * String类的功能:public String replaceAll(String regex, String replacement);
    
    正则表达式的分组功能
        * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 
        1     ((A)(B(C))) 
        2     (A 
        3     (B(C)) 
        4     (C) 
        组零始终代表整个表达式。
    
        案例演示
            a:切割
                需求:请按照叠词切割: "sdqqfgkkkhjppppkl";  将在一起出现重复的都切掉,最终: sdfghjkl
            b:替换
                需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
                将字符串还原成:“我要学编程”。
    
    Pattern类 和 Matcher类    
        Pattern类
            概述
                * Pattern在lang包下。被final修饰,所以不能被继承,实现serializable 序列化接口。
                * 是正则表达式的编译表示形式。
                * Matcher在util包下。被final修饰,所以不能被继承,通过解释 Pattern 对character sequence 执行匹配操作的引擎。
                
            Pattern和Matcher的使用
                * 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状    态都驻留在匹配器中,所以多个匹配器可以共享同一模式。 
                因此,典型的调用顺序是 
                 Pattern p = Pattern.compile("a*b"); //a*表示a出现1次或多次,b表示只出现一次
                 Matcher m = p.matcher("aaaaab");
                 boolean b = m.matches(); 
                 在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句 
                 boolean b = Pattern.matches("a*b", "aaaaab");等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
    
        Pattern类和Matcher类的应用场景
              正则表达式的获取功能
                * Pattern和Matcher的结合使用    
              案例演示
                * 需求:把一个字符串中的手机号码获取出来
                G:\CSDN_Android_\Code\Day14_正则表达式 Math类 Random类 System类 BigInteger类 BigDecimal类 Date类 Calendar类\src\com\day14\a\regex\Demo08_正则表达式_的Pattern类和Matcher类.java


e.
    Math类
        概述
            * 用于操作数字的类,比如:运算指数/对数/平方根等。
            * 该类中都是静态方法,如果一个类中所有方法都是静态,就会去私有其构造方法,为了不让其他类去创建该类的对象。
         成员方法
            * public static int abs(int a);            //绝对值,正数的绝对值还是其本身,负数绝对值是正数。
            * public static double ceil(double d);    //天花板,向上取 double整值
            * public static double floor(double d);    //地板,向下取 double整值
            * public static int max(int a, int b);    //最大值    获取两个值的最大值
            * public static int min(int a, int b);    //最小值 获取两个值的最小值
            * public static double pow(double a, double b);//返回第一个参数的第二个参数次幂的值 pow(2,3)   2^3
            * public static double random();        //随机数     生成0.0到0.1之间的随机数,包括0.0不包括0.1
            * public static int round(float a);        //四舍五入
            * public static double sqrt(double a);    //返回正确舍入的 double 值的正平方根 Math.sqrt(4));    //2.0    即该数的开平方数,即:2*2 = 4  Math.sqrt(9));    //3.0        即该数的开平方数,即:3*3 =9


    Random类
        概述
            * util包下,直接父类是Object。
            * 用于生成一个伪随机数,因为该数是通过算法算出来的,所以严格意义上不是真的随机数即伪随机数。
            * 如果采用相同的种子创建两个Random实例的nextInt()方法,即每次返回的都是同一个数字序列。
        构造方法
            * public Random();
            * public Random(long seed);  如果采用相同的种子创建两个Random实例的nextInt()方法,即每次返回的都是同一个数字序列。
        成员方法
            * public int nextInt(); 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
            * public int nextInt(int n);     生成一个0到n范围内的随机数,包含0但不包含n的一个随机数    (重点掌握)
    
        如何获取一个1-100之间的随机数(两种方式)
            A: (int)(Math.random()*100) + 1;        //包左不包右
            B: Random r = new Random();
               r.nextInt(100) + 1;



    System类     
        概述    
            * 在lang包下,直接父类Object
            * 用于操作系统的类,其中包含一些有用的 类字段 和 方法,该类中所有方法都是静态的,所以要私有该类构造方法,而且不能被其他类去创建对象。
        字段摘要
            * err 标准的错误输出流
            * in  标准的输入流    
                    * 标准的键盘输入流,默认指向的就是键盘。将我们写的一些程序信息通过键盘录入的方式输入到内存,最终到硬盘上,在硬盘中占实际空间。
            * out 标准的输出流
                    * 标准的输出流,默认指向控制台。    将结果呈现在控制台上输出给我们看:从内存中输出给我们看,没有在硬盘中占空间。
        成员方法
             * public static void gc();    //调用吃的方法,调用finlized方法来进行垃圾回收。
                        * 垃圾回收些什么东西? 当某个对象不存在更多的引用时,即 在程序中没有任何引用指向的对象就是垃圾。         
                        * 在Object中有个finalize()方法用于自动执行垃圾回收器,当finalize()方法不执行的时候,我们可以通过gc()方法去通知finalize()去执行垃圾回收,但不一定调用成功,通过多次的调用gc()去通过finalize()方法肯定会执行垃圾回收。
                        * finalize()方法不执行的原因是:系统认为这个对象的垃圾还不够的,多的时候就会自动执行回收。如果想自己手动回收,就可以使用 system.gc()方法去调用Object中的finalize去执行垃圾回收。
            * public static void exit(int status);    // 终止当前正在运行的Java虚拟机。    即退出Java虚拟机,参数是0就是正常退出,参数非0就是非状态退出。
            * public static void currentTimeMillis();    //获取当前时间的毫秒值。当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
            * public static void arraycopy(Object src, int srcPos, Object dest, int destPost, int length);    //从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
                     * 参数:
                    * src - 源数组。
                    * srcPos - 源数组中的起始位置。
                    * dest - 目标数组。
                    * destPos - 目标数据中的起始位置。
                    * length - 要复制的数组元素的数量。

System类中的gc方法告诉垃圾回收器调用finalize方法来做手动的垃圾回收操作,但不一定立即执行(不一定会执行成功,如果调用多次gc,可能会成功)    


        BigInteger类
            概述
                * 在math包下,间距父类:Number 直接父类:Object。
                * 可以让超过Integer范围内的数据进行运算。
                * 不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java的基本整数类型)。
                * BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。
                * 金融关于钱的公司用的多,因为该BigInteger存储值的范围要比Integer和Int要大的多,而且精确。
            
            构造方法    
                * public BigInteger(String val);
            成员方法
                * public BigInteger add(BigInteger value); 加
                * public BigInteger subtract(BigInteger value); 减
                * public BigInteger multiply(BigInteger value); 乘
                * public BigInteger divide(BigInteger value);    除
                * public BigInteger[] divideAndRemainder(BigInteger value); 取商 和 取余数。




        BigDecimal类   decimal有道词典翻译:    adj. 小数的;十进位的n. 小数
            概述
                * 在math包下,间接父类Number 直接父类Object。
                * 不可变的、任意精度的有符号十进制数。
                * BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
                * toString() 方法提供 BigDecimal 的规范表示形式
                
            构造方法
                * public BigDecimal(String value);通过构造传入字符串的方式,开发推荐,因为够精确。
            成员方法
                * public BigDecimal add(BigInteger value); 加
                * public BigDecimal subtract(BigInteger value); 减
                * public BigDecimal multiply(BigInteger value); 乘
                * public BigDecimal divide(BigInteger value);    除
                * public static BigDecimal valueOf(double val); 使用 Double.toString(double) 方法提供的 double 规范的字符串表示形式将 double 转换为 BigDecimal。



f.        
        Date类
            概述
                * 存在两个包下,一个在sql包下,另一个在util包下。
                * 我们这个就是util包下的,用于表示特定的瞬间,精确到毫秒值。 
            构造方法
                * public Date(); 通过毫秒值来创建时间对象。
                * public Date(long date);  如果构造参数为0,表示1970,1,1。如果没有传参数,就是当前时间。参数是 毫秒值
            成员方法    
                * public long getTime();      //通过时间对象来获取毫秒值。
                * public long setTime(long time);  //设置毫秒值,来改变当前时间对象。


​        
        SimpleDateFormat类 
            概述
                * 是一个用于实现日期和字符串的互相转换的类。
                * 是一个于语言环境有关的方式来格式化和解析日期的具体类。
                * 允许将时间格式化(日期对象 转换成format 时间字符串),解析(时间字符串 转换成parse  日期对象) 和    规范化。
                * DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是一个抽象类,使用的是其子类:SimpleDateFormat。
                        *     DateFormat d = new Dateformt(); 报错,因为该DateFormat类是抽象类,无法被实例化。
                        *    DateFormat是抽象类,是SimpleDateFormat类的抽象父类。所以使用的方式可以是:父类引用指向子类对象,如下:。
                        *    DateFormat d = DateFormat.getDateInstance(); //这就相当于 是父类引用 d 指向子类对象,右边的方法返回一个子类。即 DateFormat.getDateInstance() 等同于子类 new SimpleDateFormat()。 
                        *    相当于 DateFormat d = new SimpleDateFormat();  SimpleDateFormat中拥有Dateformat的所有方法,所以只要学习SimpleDateFormat既可。


            构造方法  --时间格式化(日期对象 转换成format  文本字符串) --格式化是最终变成字符串,使用format,用String来接收
                * public SimpleDateFormat(); 美式表示法的日期格式化类的构造方法,当没有参数的时候,表现形式是:17-9-29 上午12:40 美式表示法,具体如下:
                      Date d = new Date();    //获取当前时间对象
                        SimpleDateFormat sdf = new SimpleDateFormat();    //创建日期格式化类对象。
                      String format = sdf.format(d);    //将当前时间格式化表示。将当前时间d 用SimpleDateFormat中的format方法 格式化当前日期时间。
                      System.out.println(format);    //17-9-29 上午12:40  但是该日期是美式日期表示,所以想要我们中国自己人的格式化日期来表示,就参考demo03中的。


                * public SimpleDateformat(String pattern);    传入的参数表示自定义的日期表现形式。如:yyyy年MM月dd日 HH:mm:ss  中式表示法的日期格式化类的构造方法
                        //中国人的日期表示方法:
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");    //参数形式是固定的,一般建议不要改变
                        String strFormat = sdf.format(new Date());
                        System.out.println(strFormat); //2017年09月29日 01:18:11
                 
            成员方法 
                * public final String format(Date date); 格式化日期   --将日期 转换为 日期字符串
                
                * public Date parse(String source);    解析  --将日期字符串 转换为 日期Date对象  --解析是最终变成Date对象,使用parse 用Date对象来接收。
                
                        public Date parse(String source);    解析  --将文本字符串 转换为 日期Date对象
                        将日期字符串 转换成 日期Date对象,该过程是一个解析的过程,使用parse(String source)方法,source必须要和自定义的日期字符串对象规格一样。
                        String dateStr = "2014年04月03日 13:32:23";    //日期字符串
                        SimpleDateFormat stf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //日期格式化对象 参数必须与dateStr日期字符串中的格式一样。
                        将日期字符串解析成日期对象
                        Date parse = stf.parse(dateStr);    //该处是一个异常,异常处理有两种方式一是向上抛,二是自己try。 此时采用向上抛的形式,异常以后说。
                        System.out.println(parse);     //Thu Apr 03 13:32:23 CST 2014
            
            格式化    Date --》 String
            解析    String --> Date


        例子:你来到这个世界多少天案例
             * 需求:算一下你来到这个世界多少天?



g.
        Calendar类
            概述
                * 因为Date类中的大多部分方法都已经过时,所以在jdk1.1开始由 Calendar类来取代。
                * Calendar在util包下,直接父类Object,没有间接子类。
                * Calendar c = Calendar.getInstance();    这句话就相当于 父类引用指向子类对象了,和一般抽象类的父类引用指向子类对象 有所不同。
                * Calendar是一个抽象类,它用于特定瞬间与一组诸如:YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段 之间的转换提供了一些方法。 
            
            成员方法
                * public static Calendar getInstance();  获取一个日历,返回的是当前时间的日历表现形式。
                * public int get(int field); 返回给定日历字段的值。参数表示 Calendar.Year  Calendar.Month等。
                
            常用方法
                * public void add(int field, int amount);  根据日历的规则,为给定的日历字段添加或减去指定的时间量。
                        * 参数:field表示日历    amount表示加或减的值。该方法可针对 YEAR、MONTH 和 DAY_OF_MONTH 等做具体的时间量操作。
                * public final void set(int year, int mounth, int date);  设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
                        * 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()。 
            
            例子:
                获取任意年份是平年还是闰年
                    * 需求:键盘录入任意一个年份,判断该年是闰年还是平年  2月有29天的是闰年

你可能感兴趣的:(JAVASE,/,基础)