PTA4-6次作业总结
PTA三次作业总结
(1) 总结知识点:
7-1:水文数据校验及处理:

① StringBuilder详解:
(2)
区别:StringBuilder的原理和StringBuffer一样,不同之处在于StringBuilder不需要考虑线程安全,主要操作有append,insert
如果对字符串的改变少,使用String;
如果对字符串修改的较多,需要线程安全就用StringBuffer,不需要就使用StringBuilder。
简单的StringBuilder操作
1:public class StringBuilderFun {
public static void main(String[] args) {
//内部默认为空字符串
StringBuilder builder = new StringBuilder();
//用于在字符串末尾追加
//努力学习java,为了更好的生活
builder.append("努力学习java,为了更好的生活");
//用于更改字符串,通过字符串下标
//努力学习java,为了改变世界
builder.replace(9, 16,"为了改变世界");
//用于删除字符串
//为了改变世界
builder.delete(0, 8);
//用于插入字符串
//活着,为了改变世界
builder.insert(0, "或者");
//把builder转换为字符串
System.out.println(builder.toString());
//字符串反转reverse()
String str = "123456";
StringBuilder bui = new StringBuilder(str);
bui.reverse();
System.out.println(bui.toString());//输出结果654321
}
}
②spilt()函数:
1.函数说明:
/* String.split(sourceStr,maxSplit)
* String.split(sourceStr)
* 参数说明:sourceStr是被分割的字符串,maxSplit是最大的分割数
* 返回值说明:split函数的返回值是一个字符串数组String[]
*/
2.空格拆分:
/*
* String s1 = "A B C";
* String[]s2 = s1.split(" "); // 以1个空格拆分字符串
* String[]s2 = s1.split("\\s+"); // 以1个或多个空格拆分字符串
* String[]s2 = s1.split(" ");
*/
3.特殊(在正则表达式中有特殊含义的符号):
/* 1."."在正则表达式中有特殊的含义,因此使用的时候必须进行转义。
* 比如:String s1 = "a.b.c";
* String[]s = s1.split("."); 输出是空的
* String[]s = s1.split("\\."); 需要在前面加上\\
*
* 2.同样的 ,对于字符"|" , "*" , "+"都得加上转义字符,前面加上"\\"
*
* 3.而如果是"\",那么就得写成"\\\\"
*/
4.多个多个分隔符:
/* 如果一个字符串中有多个分隔符,可以用"|"作为连字符。
* 比如:String s = "Java string-split#test",
* 可以用s.split(" |-|#")把每个字符串分开。这样就把字符串分成了3个子字符串
*/
7-2:日期问题面向对象设计(聚合1)
聚合:聚合是一种特殊的关联形式。
它是两个类之间的关系,如关联,但它是一个方向关联,这意味着它严格地是单向关联。它代表了一种HAS-A关系
A HAS-A B 即B是A类的一部分,但has不是must has,A可以有B,也可以没有。A是整体,B是部分,整体和部分是可以分离的,聚合与关联不同,聚合关系种的两个类可以是不平等的。
本题中,DateUtil has-a Day,Day has-a Month,Month has-a Year,调用变量的时候一级级的调用:return this.day.getMonth().getYear().getValue();
与第五次作业聚合二的比较:第二次聚合是 DateUtil HAS-A Day,Month,Year
优劣比较:第一种链式聚合封装性更好,代码更简洁,但问题就是
不好维护,其中一个聚合类出现问题则可能影响整体代码。第二种聚合将DateUtil包含Year,Month,Day,将Year,Month,Day的赋值在DateUtil进行,这样的程序更易懂但过程太冗长,封装性不够好
(2).封装:就是把抽象的数据和对数据的操作封装在一起,数据被保存在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作.
继承:继承可以解决代码复用问题,让我们编程更加靠近人类的思想,当多个类存在相同的属性(变量)和方法时,可以用这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要用过extends语句来继承父类,通过super()从而自动拥有父类的属性和方法.
方法重载:类的同一种的功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数,方法重载注意事项:①方法名相同②方法的参数类型,个数,顺序至少有一项不同
方法覆盖的注意事项:
(1) 子类的方法的返回类型,参数,方法名称,要和父类方法的返回类型,参数,方法名称完全一致,否则编译出错
(2) 子类方法不能缩小父类的访问权限
多态:
所谓多态,就是指一个引用(类型)在不同情况下的多种状态,多态是指通过指向父亲的指针,来调用在不同子类中实现的方法
多态的好处:后面创建的类是前面那个类的子类,就可以通过父亲创建的对象对子类的方法进行访问,一个对象可以访问多个方法
抽象: 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法必须用abstract关键字进行修饰,抽象类不能用来创建对象,如果子类继承于一个抽象类,则子类必须实现父类的抽象方法.如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类
接口:类接口中的变量会被隐式地指定为public static final变量,而方法会被隐式指定为public abstract方法,并且接口中所有的方法不能有具体的实现,接口是一种极度抽象的类型,它比抽象类更加抽象,并且一般情况下不在接口中定义变量
要让一个类遵循某组特地的接口需要使用implements关键字
正则表达式:
一元字符:即为特定含义的字符,常用的元字符
. 匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
例子:①\d\w\s 匹配第一个字符为数字,第二个字符为字母或数字、或下划线或汉字,第三字符为空格的字符串 例如:11 ,2a , 1_
②^\d\d\d$ 匹配三个全部都为数字的字符串 例如: 123,456,789
还可以用于验证输入的字符串是否符合qq(身份证号)的验证 :
例如:^\d{8}$ 匹配8位数字的qq号,^\d{15}&匹配15位均为数字的身份证号
常用的反义字符:
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x] 匹配除了X以外的任意字符
[^abcd]匹配除了abcd这几个字母以外的任意字符
限定字符:限定字符多用于重复匹配次数
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,m}重复n到m次
示例:(1)\d*匹配重复0次或者多次数字(可能为空或任意数字)
(2)\d+匹配重复1次或多次数字
(3)\d{8}匹配重复8次的数字 如12345678
(4)\d{4,}匹配重复至少4次数字
(5)^\的{8,11}$匹配重复8-11次数字
转义字符:
在实际的开发中,可能会遇到要比配元字符的情况,这个时候就需要进行字符转义,如元字符 . * \ 需要转换为\. \* \\
例如: 需要匹配qq邮箱 \d{8,}+qq+\.+com 在这里的. 就需要加斜杠
正则表达式中的pattern,matcher类的相关用法和知识:
Pattern类:
String pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数
Matcher类:
boolean matches() 最常用方法:尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值
- boolean find() 对字符串进行匹配,匹配到的字符串可以在任何位置
- boolean lookingAt() 对前面的字符串进行匹配,只有匹配到的字符串在最前面才会返回true
题目总结:

日期聚合一:首先根据类图理清类于类之间的关系,本题采用聚合关系来编写程序,DateUtil←Day←Month←Year。在DateUtil声明Day类的对象day并构造函数,根据类图写出相应函数及其功能,Day d从Day类中获取但day的参数在Day类中传入
public void setDay(Day d){
this.day = d;
}Day类构造函数(year,month,day),month从Month类获取 public void setMonth(Month value) {
this.month = value;
调用不同类的函数或值,根据return的值可以调用
this.day.getMonth().getYear().getValue()
浙公网安备 33010602011771号