PTA4-6次作业总结

                            PTA三次作业总结

(1) 总结知识点:

7-1:水文数据校验及处理:

 

 

 

① StringBuilder详解:

(2) 

区别:StringBuilder的原理和StringBuffer一样,不同之处在于StringBuilder不需要考虑线程安全,主要操作有append,insert

如果对字符串的改变少,使用String

如果对字符串修改的较多,需要线程安全就用StringBuffer,不需要就使用StringBuilder

简单的StringBuilder操作

1public 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}重复nm

示例:(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  在这里的. 就需要加斜杠

正则表达式中的patternmatcher类的相关用法和知识:

Pattern类:

String pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数

Matcher类:

boolean matches() 最常用方法:尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值

  • boolean find() 对字符串进行匹配,匹配到的字符串可以在任何位置
  • boolean lookingAt() 对前面的字符串进行匹配,只有匹配到的字符串在最前面才会返回true

 

 

 

 

 

题目总结:

 

 

 

日期聚合一:首先根据类图理清类于类之间的关系,本题采用聚合关系来编写程序,DateUtilDayMonthYear。在DateUtil声明Day类的对象day并构造函数,根据类图写出相应函数及其功能,Day dDay类中获取但day的参数在Day类中传入

public void setDay(Day d){

        this.day = d;

 

    }Day类构造函数(year,month,day),monthMonth类获取 public void setMonth(Month value) {

        this.month = value;

    

 

调用不同类的函数或值,根据return的值可以调用

this.day.getMonth().getYear().getValue()

posted @ 2021-04-29 11:39  C调战神  阅读(93)  评论(0)    收藏  举报