api接口基础Day2

打印 上一主题 下一主题

主题 1023|帖子 1023|积分 3073

精华笔记:

  • 正则表达式:

    • 用于描述字符串的内容格式,使用它通常用于匹配一个字符串是否符合格式要求
    • 正则表达式的语法:-------------了解、不用纠结、不用深入研究
      1. 1.[]:表示一个字符,该字符可以是[]中指定的内容
      2.   例如:
      3.   [abc]:这个字符可以是a或b或c
      4.   [a-z]:表示任意一个小写字母
      5.   [a-zA-Z]:表示任意一个字母
      6.   [a-zA-Z0-9]:表示任意一个字母数字
      7.   [a-zA-Z0-9_]:表示任意一个数字字母下划线
      8.   [^abc]:该字符只要不是a或b或c
      9. 2.预定义字符:
      10.   .:表示任意一个字符,没有范围限制
      11.   \d:表示任意一个数字,等同于[0-9]
      12.   \w:表示任意一个单词字符,等同于[a-zA-Z0-9_]----单词字符指字母/数字/_
      13.   \s:表示任意一个空白字符
      14.   \D:表示不是数字
      15.   \W:不是单词字符
      16.   \S:不是空白字符
      17. 3.量词:
      18.   ?:表示前面的内容出现0-1次
      19.     例如: [abc]? 可以匹配:a 或 b 或 c 或什么也不写
      20.   +:表示前面的内容最少出现1次
      21.     例如: [abc]+ 可以匹配:b或aaaaaaaaaa...或abcabcbabcbabcba....
      22.           但是不能匹配:什么都不写 或 abcfdfsbbaqbb34bbwer...
      23.   *:表示前面的内容出现任意次(0-多次)---匹配内容与+一致,只是可以一次都不写
      24.     例如: [abc]* 可以匹配:b或aaaaaaaaaa...或abcabcba....或什么都不写
      25.           但是不能匹配:abcfdfsbbaqbb34bbwer...
      26.   {n}:表示前面的内容出现n次
      27.       例如: [abc]{3} 可以匹配:aaa 或 bbb 或 aab 或abc 或bbc
      28.            但是不能匹配: aaaa 或 aad
      29.   {n,m}:表示前面的内容出现最少n次最多m次
      30.         例如: [abc]{3,5} 可以匹配:aaa 或  abcab 或者 abcc
      31.         但是不能匹配:aaaaaa 或 aabbd
      32.   {n,}:表示前面的内容出现n次以上(含n次)
      33.        例如: [abc]{3,} 可以匹配:aaa 或 aaaaa.... 或 abcbabbcbabcba....
      34.             但是不能匹配:aa 或 abbdaw...
      35. 4.()用于分组,是将括号内的内容看做是一个整体     
      36.   例如: (abc){3} 表示abc整体出现3次. 可以匹配abcabcabc
      37.         但是不能匹配aaa 或abcabc
      38.         (abc|def){3}表示abc或def整体出现3次.
      39.         可以匹配: abcabcabc 或 defdefdef 或 abcdefabc
      40.         但是不能匹配abcdef 或abcdfbdef
      复制代码

  • String支持与正则表达式相关的方法:

    • matches():
    • replaceAll():
    • split():

  • Object:对象/东西

    • 是所有类的鼻祖,所有类都直接或间接继承了Object,万物皆对象,为了多态
    • Object中有几个经常被派生类重写的方法:toString()和equals()

      • 调用Object类的toString()时默认返回:类的全称@地址,没有参考意义,所以常常重写toString()来返回具体属性的值
        注意:String、StringBuilder等都重写toString()来返回字符串内容了

      • 调用Object类的equals()时默认比较的还是==(即比较地址),没有参考意义,所以常常重写equals()来比较具体的属性值
        注意:

        • String类已经重写equals()来比较字符串内容了,但StringBuilder并没有
        • 重写equals()的基本规则:

          • 原则上要比较两个对象的属性值是否相同
          • 两个对象必须是同一类型的,若类型不同则返回false




  • 包装类:

    • java定义了8个包装类,目的就是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的形式存在。
    • 包括:Integer、Character、Byte、Short、Long、Float、Double、Boolean,其中Character和Boolean是直接继承自Object的,而其余6个包装类继承自java.lang.Number类。
    • JDK1.5推出了一个新的特性:自动拆装箱,当编译器编译时若发现是基本类型与包装类型之间相互赋值,将自动补充代码来完成转换工作,这个过程称为自动拆装箱。

精华笔记:


  • 正则表达式:

    • 用于描述字符串的内容格式,使用它通常用于匹配一个字符串是否符合格式要求
    • 正则表达式的语法:-------------了解、不用纠结、不用深入研究
      1. 1.[]:表示一个字符,该字符可以是[]中指定的内容
      2.   例如:
      3.   [abc]:这个字符可以是a或b或c
      4.   [a-z]:表示任意一个小写字母
      5.   [a-zA-Z]:表示任意一个字母
      6.   [a-zA-Z0-9]:表示任意一个字母数字
      7.   [a-zA-Z0-9_]:表示任意一个数字字母下划线
      8.   [^abc]:该字符只要不是a或b或c
      9. 2.预定义字符:
      10.   .:表示任意一个字符,没有范围限制
      11.   \d:表示任意一个数字,等同于[0-9]
      12.   \w:表示任意一个单词字符,等同于[a-zA-Z0-9_]----单词字符指字母/数字/_
      13.   \s:表示任意一个空白字符
      14.   \D:表示不是数字
      15.   \W:不是单词字符
      16.   \S:不是空白字符
      17. 3.量词:
      18.   ?:表示前面的内容出现0-1次
      19.     例如: [abc]? 可以匹配:a 或 b 或 c 或什么也不写
      20.   +:表示前面的内容最少出现1次
      21.     例如: [abc]+ 可以匹配:b或aaaaaaaaaa...或abcabcbabcbabcba....
      22.           但是不能匹配:什么都不写 或 abcfdfsbbaqbb34bbwer...
      23.   *:表示前面的内容出现任意次(0-多次)---匹配内容与+一致,只是可以一次都不写
      24.     例如: [abc]* 可以匹配:b或aaaaaaaaaa...或abcabcba....或什么都不写
      25.           但是不能匹配:abcfdfsbbaqbb34bbwer...
      26.   {n}:表示前面的内容出现n次
      27.       例如: [abc]{3} 可以匹配:aaa 或 bbb 或 aab 或abc 或bbc
      28.            但是不能匹配: aaaa 或 aad
      29.   {n,m}:表示前面的内容出现最少n次最多m次
      30.         例如: [abc]{3,5} 可以匹配:aaa 或  abcab 或者 abcc
      31.         但是不能匹配:aaaaaa 或 aabbd
      32.   {n,}:表示前面的内容出现n次以上(含n次)
      33.        例如: [abc]{3,} 可以匹配:aaa 或 aaaaa.... 或 abcbabbcbabcba....
      34.             但是不能匹配:aa 或 abbdaw...
      35. 4.()用于分组,是将括号内的内容看做是一个整体     
      36.   例如: (abc){3} 表示abc整体出现3次. 可以匹配abcabcabc
      37.         但是不能匹配aaa 或abcabc
      38.         (abc|def){3}表示abc或def整体出现3次.
      39.         可以匹配: abcabcabc 或 defdefdef 或 abcdefabc
      40.         但是不能匹配abcdef 或abcdfbdef
      复制代码

  • String支持与正则表达式相关的方法:

    • matches():使用给定的正则表达式(regex)验证当前字符串的格式是否符合要求,符合则返回true,否则返回false
      1. public class MatchesDemo {
      2.     public static void main(String[] args) {
      3.         /*
      4.           邮箱正则表达式:
      5.             [a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+
      6.           注意: \.中的这个\是正则表达式中的转义符
      7.                \\.中的第1个\,是在转义正则表达式中的\
      8.          */
      9.         String email = "wangkj@tedu.cn";
      10.         String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
      11.         //使用regex匹配email是否符合格式要求
      12.         boolean match = email.matches(regex);
      13.         if(match){
      14.             System.out.println("是正确的邮箱格式");
      15.         }else{
      16.             System.out.println("不是正确的邮箱格式");
      17.         }
      18.     }
      19. }
      复制代码
    • replaceAll():将当前字符串中满足正则表达式(regex)的部分给替换为给定的字符串(s)
      1. public class ReplaceAllDemo {
      2.     public static void main(String[] args) {
      3.         String line = "abc123def456ghi78";
      4.         line = line.replaceAll("[0-9]+","#NUMBER#");
      5.         System.out.println(line);
      6.     }
      7. }
      复制代码
    • split():将当前字符串按照满足正则表达式的部分进行拆分,将将拆分出的以String[]形式来返回
      1. public class SplitDemo {
      2.     public static void main(String[] args) {
      3.         String line = "abc123def456ghi";
      4.         String[] data = line.split("[0-9]+"); //按数字拆分(数字就拆没了)
      5.         System.out.println(Arrays.toString(data)); //将data数组转换为字符串并输出
      6.         line = "123.456.78";
      7.         data = line.split("\\."); //按.拆(.就拆没了)
      8.         System.out.println(Arrays.toString(data));
      9.         //最开始就是可拆分项(.),那么数组第1个元素为空字符串-------------""
      10.         //如果连续两个(两个以上)可拆分项,那么中间也会拆出一个空字符串-----""
      11.         //如果末尾连续多个可拆分项,那么拆出的空字符串被忽略
      12.         line = ".123.456..78.......";
      13.         data = line.split("\\."); //按.拆(.就拆没了)
      14.         System.out.println(Arrays.toString(data));
      15.     }
      16. }
      复制代码

  • Object:对象/东西

    • 是所有类的鼻祖,所有类都直接或间接继承了Object,万物皆对象,为了多态
    • Object中有几个经常被派生类重写的方法:toString()和equals()

      • 调用Object类的toString()时默认返回:类的全称@地址,没有参考意义,所以常常重写toString()来返回具体属性的值
        注意:String、StringBuilder等都重写toString()来返回字符串内容了
        1. package apiday02;
        2. import java.util.Objects;
        3. //点
        4. public class Point {
        5.     private int x;
        6.     private int y;
        7.     public Point(int x, int y) {
        8.         this.x = x;
        9.         this.y = y;
        10.     }
        11.     @Override
        12.     public String toString() {
        13.         return "Point{" +
        14.                 "x=" + x +
        15.                 ", y=" + y +
        16.                 '}';
        17.     }
        18.    
        19.     public int getX() {
        20.         return x;
        21.     }
        22.     public void setX(int x) {
        23.         this.x = x;
        24.     }
        25.     public int getY() {
        26.         return y;
        27.     }
        28.     public void setY(int y) {
        29.         this.y = y;
        30.     }
        31. }
        32. public class ObjectDemo {
        33.     public static void main(String[] args) {
        34.         /*
        35.           输出引用变量时默认会调用Object类的toString()方法
        36.           该方法返回的字符串格式为: 类的全称@地址
        37.           但通常这个返回结果对我们的开发是没有任何意义
        38.           我们真正想输出的应该是对象的属性值,Object类的toString()并不能满足需求
        39.           因此常常需要重写toString()来返回具体的属性值
        40.          */
        41.         
        42.         Point p = new Point(100,200);
        43.         System.out.println(p); //输出引用变量时默认调用Object类的toString()
        44.         System.out.println(p.toString());
        45.          
        46.     }
        47. }
        复制代码
      • 调用Object类的equals()时默认比较的还是==(即比较地址),没有参考意义,所以常常重写equals()来比较具体的属性值
        注意:

        • String类已经重写equals()来比较字符串内容了,但StringBuilder并没有
        • 重写equals()的基本规则:

          • 原则上要比较两个对象的属性值是否相同
          • 两个对象必须是同一类型的,若类型不同则返回false

        1. package apiday02;
        2. import java.util.Objects;
        3. //点
        4. public class Point {
        5.     private int x;
        6.     private int y;
        7.     public Point(int x, int y) {
        8.         this.x = x;
        9.         this.y = y;
        10.     }
        11.     @Override
        12.     public String toString() {
        13.         return "Point{" +
        14.                 "x=" + x +
        15.                 ", y=" + y +
        16.                 '}';
        17.     }
        18.     @Override
        19.     public boolean equals(Object o) {
        20.         if (this == o) return true;
        21.         if (o == null || getClass() != o.getClass()) return false;
        22.         Point point = (Point) o;
        23.         return x == point.x && y == point.y;
        24.     }
        25.     @Override
        26.     public int hashCode() { //hashcode是散列值,现在先不用纠结,后面才讲到
        27.         return Objects.hash(x, y);
        28.     }
        29.     public int getX() {
        30.         return x;
        31.     }
        32.     public void setX(int x) {
        33.         this.x = x;
        34.     }
        35.     public int getY() {
        36.         return y;
        37.     }
        38.     public void setY(int y) {
        39.         this.y = y;
        40.     }
        41. }
        42. public class ObjectDemo {
        43.     public static void main(String[] args) {
        44.         /*
        45.           调用Object类的equals(),内部还是在使用==比较地址,没有实际意义
        46.           若想比较对象的属性值是否相同,我们认为Object的equals()并不能满足需求
        47.           因此常常需要重写equals()
        48.         */
        49.         /*
        50.         Point p1 = new Point(100,200);
        51.         Point p2 = new Point(100,200);
        52.         System.out.println(p1==p2); //false,==比较的是地址
        53.         //因为调用的是Point类重写之后的equals(),内部比较的是属性的值是否相同
        54.         System.out.println(p1.equals(p2)); //true
        55.         */
        56.         String s1 = new String("hello");
        57.         String s2 = new String("hello");
        58.         //String重写equals()来比较字符串内容是否相同了
        59.         System.out.println(s1.equals(s2)); //true
        60.         StringBuilder builder1 = new StringBuilder("hello");
        61.         StringBuilder builder2 = new StringBuilder("hello");
        62.         //StringBuilder没有重写equals(),所以调用的还是Object的equals(),还是比较地址
        63.         System.out.println(builder1.equals(builder2)); //false
        64.         //s1与builder1的类型不同,所以equals()一定是false
        65.         System.out.println(s1.equals(builder1)); //false
        66.    
        67.     }
        68. }
        复制代码


  • 包装类:

    • java定义了8个包装类,目的就是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的形式存在。
    • 包括:Integer、Character、Byte、Short、Long、Float、Double、Boolean,其中Character和Boolean是直接继承自Object的,而其余6个包装类继承自java.lang.Number类。
    • JDK1.5推出了一个新的特性:自动拆装箱,当编译器编译时若发现是基本类型与包装类型之间相互赋值,将自动补充代码来完成转换工作,这个过程称为自动拆装箱。
      1. public class IntegerDemo {
      2.     public static void main(String[] args) {
      3.         //演示包装类的常用操作:
      4.         //1)可以通过包装类来获取基本类型的取值范围:
      5.         int max = Integer.MAX_VALUE; //获取int的最大值
      6.         int min = Integer.MIN_VALUE; //获取int的最小值
      7.         System.out.println("int的最大值为:"+max+",最小值为:"+min);
      8.         long max1 = Long.MAX_VALUE; //获取long的最大值
      9.         long min1 = Long.MIN_VALUE; //获取long的最小值
      10.         System.out.println("long的最大值为:"+max1+",最小值为:"+min1);
      11.         
      12.         //2)包装类型可以将字符串转换为对应的基本类型------必须熟练掌握
      13.         String s1 = "38";
      14.         int age = Integer.parseInt(s1); //将字符串s1转换为int类型
      15.         System.out.println(age); //38------int
      16.         String s2 = "123.456";
      17.         double price = Double.parseDouble(s2); //将字符串s2转换为double类型
      18.         System.out.println(price); //123.456-------double
      19.         /*
      20.         //触发自动装箱特性,会被编译为:Integer i = Integer.valueOf(5);
      21.         Integer i = 5; //基本类型到包装类型----装箱
      22.         //触发自动拆箱特性,会被编译为:int j = i.intValue();
      23.         int j = i; //包装类型到基本类型----拆箱
      24.         */
      25.         /*
      26.         Integer i1 = new Integer(5);
      27.         Integer i2 = new Integer(5);
      28.         System.out.println(i1==i2); //false,因为==是比较地址
      29.         //Integer.valueOf()会复用-128到127范围内的数据---使用valueOf()方式更多一些
      30.         Integer i3 = Integer.valueOf(5);
      31.         Integer i4 = Integer.valueOf(5);
      32.         System.out.println(i3==i4); //true
      33.          */
      34.     }
      35. }
      复制代码

补充:


  • 将数组转换为字符串:

    • Arrays.toString(数组名)----将某个数组转换为字符串

  • 进制:
    1. 1)十进制:
    2.   1.1)规则:逢10进1
    3.   1.2)数字:0 1 2 3 4 5 6 7 8 9
    4.   1.3)基数:10
    5.   1.4)权:万  千  百  十  个
    6. 2)二进制:
    7.   2.1)规则:逢2进1
    8.   2.2)数字:0 1
    9.   2.3)基数:2
    10.   2.4)权:128 64 32 16 8 4 2 1
    11. 3)十六进制:
    12.   3.1)规则:逢16进1
    13.   3.2)数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
    14.   3.3)基数:16
    15.   3.4)权:65536 4096 256 16 1
    复制代码
  • 十六进制的权:
    1. 16的0次幂-------------1
    2. 16的1次幂-------------16
    3. 16的2次幂-------------256
    4. 16的3次幂-------------4096
    5. 16的4次幂-------------65536
    复制代码
    二进制的权:
    1. 2的0次幂-------------1
    2. 2的1次幂-------------2
    3. 2的2次幂-------------4
    4. 2的3次幂-------------8
    5. 2的4次幂-------------16
    复制代码
    十进制的权:
    1. 10的0次幂------------1
    2. 10的1次幂------------10
    3. 10的2次幂------------100
    4. 10的3次幂------------1000
    5. 10的4次幂------------10000
    复制代码
  • 二进制转换为十进制的规则:所有为1的权相加-----------正数
    要求:今天必须熟练记住最后4个权(8421)
    1. 权:    32  16  8  4  2  1
    2. 二进制: 1   1   0  1  0  1
    3. 十进制: 32+16+4+1---------------53
    4.    
    5. 权:    32  16  8  4  2  1
    6. 二进制: 0   0   1  1  0  1
    7. 十进制: 8+4+1-------------------13
    8.    
    9. 权:    32  16  8  4  2  1
    10. 二进制: 1   0   1  0  1  0
    11. 十进制: 32+8+2------------------42
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表