BLOG作业三

一:正则表达式踩坑心得

 

1.正则表达式基本语法

 

     

 

2.识别字符时存在的问题

      一般按照语法操作,会在识别某个特殊字符时只加一个反斜杠,然后发现自己写的正则表达式根本无法匹配上预先的字符串(如果别的地方没问题的话),其实,一个反斜杠代表的是转义字符,所以,当要识别字符时字符前面要加两个反斜杠(正则表达式所有字符都这样)。

3.|的运用

    一般|的错误比较难以寻找,所以用到|的时候一定要注意到是否需要用到()小括号,或者说应该要用的时候没有用,用了又使用错误,如以下错误:

     First:  "abc|def"  与"ab(c|d)ef"的区别,前者是要么是|前面所有的要么是|后面所有的,后者识别为abcef或abdef,细品。

     一旦正则表达式比较长,|的运用出错,将会浪费大把时间。

4.小括号的作用与[]的运用以及两者的混合运用

        小括号:方便用于选择识别字符串

         小括号字符的第一个作用就是可以改变限定符的作用范围,如“|”、“*”、“^”等。来看下面的一个表达式。

  (thir|four)th,这个表达式的意思是匹配单词thirth或fourth,如果不使用小括号,那么就变成了匹配单词thir和fourth了。

  小括号的第二个作用是分组,也就是子表达式。如(\.[0-9]{1,3}){3},就是对分组(\.[0-9]{1,3})进行重复操作。后面要学到的反向引用和分组有着直接的关系。

5.点号字符(比较少用)

     点字符(.)可以匹配出换行符外的任意一个字符。

  注意:是除了换行符外的、任意的一个字符。如匹配以s开头、t结尾、中间包含一个字母的单词。

  格式如下: ^s.t$,匹配的单词包括:sat、set、sit等。

  再举一个实例,匹配一个单词,它的第一个字母为r,第3个字母为s,最后一个字母为t。能匹配该单词的正则表达式为:^r.s.*t$

6.-字符

   变量的命名规则是只能以字母和下划线开头。但这样一来,如果要使用正则表达式来匹配变量名的第一个字母,要写为 :[a,b,c,d…A,B,C,D…]

  这无疑是非常麻烦的,正则表达式提供了连字符“-”来解决这个问题。连字符可以表示字符的范围。如上例可以写成 :[a-zA-Z]

  二:Pta最后一次迭代作业的收获

       第一:多态

      

定义容器Container接口。模拟实现一个容器类层次结构,并进行接口的实现、抽象方法重写和多态机制测试。各容器类实现求表面积、体积的方法。

  1. 定义接口Container:
    属性:
    public static final double pi=3.1415926;
    抽象方法:
    public abstract double area();
    public abstract double volume();
    static double sumofArea(Container c[]);
    static double sumofVolume(Container c[]);
    其中两个静态方法分别计算返回容器数组中所有对象的面积之和、周长之和;
  2. 定义Cube类、Cylinder类均实现自Container接口。
    Cube类(属性:边长double类型)、Cylinder类(属性:底圆半径、高,double类型)。

输入格式:

第一行n表示对象个数,对象类型用cube、cylinder区分,cube表示立方体对象,后面输入边长,输入cylinder表示圆柱体对象,后面是底圆半径、高。

输出格式:

分别输出所有容器对象的表面积之和、体积之和,结果保留小数点后2位。

            Cube类、Cylinder类均实现自Container接口,利用多态的优点,使得传参数的时候减少重复代码。

   

       00接口特点: 

       接口用关键字interface修饰:

      public interface 接口名{}

     接口的实现类:

      要么重写其所有抽象方法

      要么是抽象类

                  成员变量:

                   只能是常量(因为即使你这般定义变量,double  a  = 0,其实就是默认a只能为0,将无法修改,这是因为每个类型前面都有一个public  static  final修饰,这是接口的规则,没有为什么)

                 构造方法

                 接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在的。

                 一个类如果没有父类,默认继承自Object类。

                 成员方法

     只能是抽象方法

    默认修饰符public  abstract(即,void  start();其实就是 public  abstract  void start()  )

             注:对接口的实现用的关键词与继承(父类,抽象类)不同,用的是implements(public class 类名  implements  接口名{})

            

     抽象类的特点:

 

    抽象类和抽象方法都必须实验abstract关键字进行修饰

      public abstract  class 类名{}

      public abstract void eat();

   抽象类不一定有抽象方法,有抽象方法的类一点是抽象类;

   

       抽象类的成员特点

    成员变量

              既可以是变量也可以是常量

  构造方法

    有构造方法,但是不能实例化(即不能这么用CXL  cxl = new CXL();),其中CXL是抽象类的名称,不能直接实例化对象,而应该这么用CXL  cxl = new CXLEZ()   ,CXLEZ是CXL的子类。

               构造方法的作用是用于子类访问父类数据的初始化

  成员方法

    可以有抽象方法:但是子类必须重写该父类的所有抽象方法

               也可以有非抽象方法:提高代码的复用性(将子类所有相同的代码放到父类中,同时减少了代码的重复,也提高了代码的复用性)

   

    多态总结:

      多态中成员访问特点

                    成员变量:编译看左边,执行看左边。

                     成员方法:编译看左边,执行看右边

     (FU   zi = new Zi())

                 编译看左边:编译时(即程序还未运行时)找错误,如果代码中FU的对象调用了FU中没有的变量,会报错。

                 执行看左边:编译时(即程序还未运行时)找错误,如果代码中FU的对象调用了FU中没有的变量,不会报错,而是在程序运行时才会报错。

               方法  执行看右边:执行内容为子类方法中的内容,而非父类中的内容。

        多态中的转型

           1.向上转型

               从子到父

               父类引用指向子类对象

              父亲类型  变量名 =  new 子类对象();

              好处:

              扩展性强:可以赋值不同的子类对象,调用不同子类重写后的方法

 

         2.向下转型(把父类类型的变量强制转换为子类类型)

             前提:必须有多态

             从父到子

             父类引用转为子类对象

          子类类型   变量名  =  (子类类型)父类变量名

             int  a = (int) 8.8;

          好处:转换为子类类型后,就可以使用子类特有的功能

             考前知识梳理:

              1.正则表达式的理解运用

              2.字符串的截取(String  str[]  = s.split(正则表达式))

             3.字符的挑选(s.charAt(index));

             4.Arraylist<>的方法运用(有序)

 1、add(Object element): 向列表的尾部添加指定的元素。


2、size(): 返回列表中的元素个数。

3、get(int index): 返回列表中指定位置的元素,index从0开始。

4、add(int index, Object element): 在列表的指定位置插入指定元素。(添加后链表长度size()发生变化,后所有项往后移一位

5、set(int i, Object element): 将索引i位置元素替换为元素element并返回被替换的元素。

6、clear(): 从列表中移除所有元素。

7、isEmpty(): 判断列表是否包含元素,不包含元素则返回 true,否则返回false。

8、remove(int index): 移除列表中指定位置的元素,并返回被删元素。(移除后链表长度size()发生变化,后所有项往前移一位)

9、remove(Object o): 移除集合中第一次出现的指定元素,移除成功返回true,否则返回false。

              

posted @ 2022-06-16 17:54  黄文豪大帅比  阅读(115)  评论(0)    收藏  举报