4-6题总结
零、目录
一、前言
题集四
知识点:正则表达式的规则编写与灵活使用、类的继承、函数重写
题量:适中
难度:
7-1 ★★★✩✩
7-2 ★★✩✩✩
7-1 ★✩✩✩✩

题集五
知识点:类的继承与封装、排序算法
题量:适中
难度:
7-1 ★✩✩✩✩
7-2 ★✩✩✩✩
7-3 ★✩✩✩✩
7-4 ★★★✩✩
7-5 ★★✩✩✩
备注:7-4题目测试点有问题,据称是在特定字符数之后的部分关键词不计入才得分。

题集六
知识点:正则表达式的规则编写与灵活使用、继承与多态、接口的实现
题量:适中
难度:
7-1 ★✩✩✩✩
7-2 ★✩✩✩✩
7-3 ★✩✩✩✩
7-4 ★✩✩✩✩
7-5 ★★✩✩✩
7-6 ★★✩✩✩

二、设计与分析
(1)题集四(7-2)、题集五(7-4)两种日期聚合的优劣与比较
前者是dateUtil类中绑定Day对象,Day对象中绑定Month对象,Month对象中绑定Year对象
后者是dateUtil类中绑定Day、Month、Year对象
前者能在Day增减函数中就判断月份和年份的变化,可以调用到Year和Month对象,但嵌套调用比较繁琐
后者能在Util类中直接获取D、Y、M对象,不用层层嵌套调用,但对于日期增减引发的变化需要在此类中完成
(2)题集四(7-3)
Circle和Rectangle继承Shape类 二维图形继承图形类
Ball继承Circle类 三维图形继承二维图形类
Box继承Rectangle类 三维图形继承二维图形类

(3)题集六(7-5)
Triangle、Circle、Rectangle均继承Shape类


(4)题集六(7-6)
Rectangle、Circle均实现GetArea接口

(4)正则表达式
题集四、7-1
日期
^(?:(?!0[0-9]*)[0-9]{1,4}([/]?)(?:(?:[1-9]|1[0-2])\1(?:[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([/]?)0?2\2(?:29))\s([1-2]?[02468]):00$
均为实型数,取值范围为[1,1000),小数点后保留 1-3 位小数或无小数(此时不需要写小数点)
^(([1-9][0-9][0-9])|([1-9][0-9])|([1-9]))((\.)((\d\d[0-9])|(\d[0-9])|([0-9])))?$
实型数,取值范围为[1,10),必须保留 2 位小数,两个开度之间用 “/” 分隔
^[1-9].([1-9]\d)$
双引号
\"(.*?)\"
单引号
\'(.*?)\'
单行注释
//.*
多行注释
/\\*\\*(\\s*.*\\s*)*\\*/
题集六
校验QQ 号是否合格
^[1-9]\\d{4,14}$
验证码校验
^[0-9a-zA-Z]{4}$
学号校验
^2020(1[1-7]|61|7[1-3]|8[1-2])(?!00)([0-3][0-9]|40)$
(5)题集五(7-4)
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“Key”和“Value”),其中每个Key映射到一个Value。
Map基础使用方式如下:
| clear() | 从 Map 中删除所有映射 |
| remove(Object key) | 从 Map 中删除键和关联的值 |
| put(Object key, Object value) | 将指定值与指定键相关联 |
| clear() | 从 Map 中删除所有映射 |
| putAll(Map t) | 将指定 Map 中的所有映射复制到此 map |
排序:
0.
1 class ClassName implements Comparator<String>{
2
3 @Override
4
5 public int compare(String str1, String str2) {
6
7 return str1.compareTo(str2);
8
9 }
10
11 }
1.
|
1
|
Map<String, Integer> resultMap = sortMapByKey(map); |
2.
1 public static Map<String, Integer> sortMapByKey(Map<String, Integer> map) {
2 if (map == null || map.isEmpty()) {
3 return null;
4 }
5
6 Map<String, Integer> sortMap = new TreeMap<String, Integer>(
7 (Comparator<? super String>) new MapKeyComparator());
8
9 sortMap.putAll(map);
10
11 return sortMap;
12 }
三、踩坑心得
7-4 统计Java程序中关键词的出现次数 (25 分)
主要集中在这题,对于还原输入的代码,一开始采用
String line = "";
StringBuilder str = new StringBuilder();
while( !(line = input.nextLine().trim()).equals("exit")){
//System.out.println(line);
str.append(line + "\n");
}
发现在处理多行注释的时候会出问题,于是改成
while( !(line = input.nextLine().trim()).equals("exit")){
//System.out.println(line);
str.append(line + " ");
}
发现在处理单行注释的时候无法分开
于是考虑在获取line之后就处理掉单行注释,于是改成
while( !(line = input.nextLine().trim()).equals("exit")){
//System.out.println(line);
line = line.replaceAll("//.*"," ");
str.append(line + " ");
}
成为了最终版本。
Keywords上
String []keywords= { "abstract","assert","boolean","break","byte","case","catch",
"char","class","const","continue","default","do","double","else",
"enum","extends","false","final","finally","float",
"for","goto","if","implements","import","instanceof",
"int","interface","long","native","new","null","package",
"private","protected","public","return","short","static",
"strictfp","super","switch","synchronized","this","throw",
"throws","transient","true","try","void","volatile","while"};
一共53个,一个一个核对起来,生怕哪个词拼错了。
在处理特殊字符上,把这些特殊字符替换成字母a
s=s.replace("-","a");
s=s.replace("*","a");
s=s.replace("/","a");
s=s.replace("+","a");
s=s.replace(">","a");
s=s.replace("=","a");
s=s.replace("!","a");
s=s.replace(":","a");
s=s.replace("\\","a");
剩余的字符则采用
s = s.replaceAll("[^a-zA-Z]", " ");
对于单词分隔采用
| \b | 匹配一个单词边界,即字与空格间的位置。 |
Pattern r = Pattern.compile("\\b" + keywords[i] + "\\b");
四、改进建议
题集四 无
题集五(7-1)
可对排序做个类封装,使用ArrayList储存每个单词的类对象
题集五(7-2)
对拼接数组,拼接数组排序做个类封装
题集五(7-4)
对于拼接每行代码独立成函数,处理注释、处理符号独立成函数
题集六(7-1、7-3、7-4)
1 String pattern = "^[1-9]\\d{4,14}$";
2 Pattern r = Pattern.compile(pattern);
3 Matcher m = r.matcher(str);
将这三行封装为函数,返回Matcher对象
题集六(7-2)
对char转ascii和ascii转char做成函数
五、总结
学会:正则表达式的规则编写与灵活使用、继承与多态、接口的实现、函数重写、三种基础排序算法
进一步学习:更灵活的接口使用、正则表达式更复杂的编写
建议与意见:请对发布的PTA题目每个测试点仔细测试,测试点答案出问题写题体验极其糟糕!也会降低写题目的热情!请勿再出现!

浙公网安备 33010602011771号