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接口。模拟实现一个容器类层次结构,并进行接口的实现、抽象方法重写和多态机制测试。各容器类实现求表面积、体积的方法。
- 定义接口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[]);
其中两个静态方法分别计算返回容器数组中所有对象的面积之和、周长之和; - 定义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。
浙公网安备 33010602011771号