(1)前言:

三次题目集的知识点:

正则表达式(Regular Expression,简称Regex或RegExp)是一个强大的文本处理工具,用于匹配、查找和替换字符串。以下是正则表达式的主要知识点总结:

基本字符:

字面字符:表示自身的字符,如a、1、$等。

转义字符:使用\作为前缀,如\n表示换行。

字符类:

单字符:用[ ]表示,如[abc]匹配任意一个字符a、b或c。

范围:如[a-z]匹配任意小写字母。

排除:使用[^ ]表示,如[^0-9]匹配任意非数字字符。

预定义字符类:

\d:匹配数字,等价于[0-9]。

\D:匹配非数字。

\w:匹配单词字符,包括字母、数字、下划线。

\W:匹配非单词字符。

\s:匹配空白字符,如空格、制表符、换行符。

\S:匹配非空白字符。

数量词:

*:零次或多次。

+:一次或多次。

?:零次或一次。

{n}:恰好n次。

{n,}:至少n次。

{n,m}:至少n次,至多m次。

边界匹配:

^:匹配字符串开始。

$:匹配字符串结束。

\b:匹配单词边界。

\B:匹配非单词边界。

分组和引用:

使用( )进行分组。

\1, \2, ...:反向引用,引用之前的分组。

零宽断言:

(?=...):正向预查。

(?!...):负向预查。

(?<=...):正向后查。

(?<!...):负向后查。

替换和捕获:

String.replaceAll(regex, replacement):替换匹配的字符串。

Pattern和Matcher类用于更复杂的字符串操作和捕获组。

匹配模式:

Pattern.CASE_INSENSITIVE:忽略大小写。

Pattern.MULTILINE:多行模式。

Pattern.DOTALL:.匹配所有字符,包括换行符。

工具和应用:

使用在线正则表达式测试器进行调试。

编写单元测试以验证正则表达式的正确性。

在编程语言中使用正则表达式库进行字符串处理。

数据类型和变量:包括基本数据类型(例如int、double、boolean等)以及变量的声明、初始化和赋值。

运算符:包括算术运算符、比较运算符、逻辑运算符和位运算符等。

控制结构:包括条件语句(if-else)、循环结构(for、while、do-while)和switch-case等。

方法:包括方法的声明、定义、调用、参数传递和返回值。

类和对象:包括类的定义、构造方法、字段、方法和对象的创建和使用。

继承和多态:包括继承的基本概念、重写、重载和多态的应用。

数组:包括一维数组和多维数组的声明、初始化和遍历。

字符串操作:包括字符串的声明、连接、分割、查找等常见操作。

异常处理:包括try-catch-finally语句,以及常见异常类型的处理。

基本数据结构:例如列表、栈、队列、哈希表等数据结构的基本操作和应用。

题量:虽然题目数量不多,只有三道题,但是最后一题难度太大了,并且分数占比很大

难度:前两道题目难度不大,算简单,但是最后一题的连贯性很强并且很复杂

(2)设计与分析:

下面是我第一次PTA的最后一题



很抽象地把所有类放在了一个类里面,导致我最后分不清类,也未完成作业



在这次教训后,

我在后面的PTA作业中将类分块放,有了一些进步,也让我对Java这个语言的精髓有了更多的理解

以下是我第二次Java最后一个题目的代码

![](https://img202

4.cnblogs.com/blog/3433267/202404/3433267-20240421225954357-1257459199.png)

但是在第三次作业中,我看见题目实在很难读懂,所以没有花时间在最后一题的解决上

但是在写题目过程中,我学会了很多Java的知识点:首先是对集合概念更加理解,单列集合和双列集合,每个集合的操作,例如s.forEach(...): forEach 方法用于迭代集合 s 中的每个元素,并对每个元素执行指定的操作。

new Consumer() { ... }: 创建了一个匿名内部类实现了 Consumer 接口的实例。

public void accept(String st) { ... }: 实现了 Consumer 接口中的 accept 方法,该方法定义了对集合中每个元素的操作。

除此之外,对有无索引的概念更加清晰:有索引:

有索引通常指的是支持通过索引位置来访问元素的数据结构,比如数组和某些列表实现(如 ArrayList)。

对于有索引的数据结构,可以通过索引值来直接获取或修改特定位置的元素,这样可以在常量时间内(O(1) 时间复杂度)完成操作。

无索引:

无索引可能指的是某些数据结构或方法不支持通过索引来直接访问元素,而是通过其他方式进行操作的情况。

例如,链表(如 LinkedList)通常不支持随机访问,而是需要从头开始顺序遍历到目标位置才能访问到特定的元素。这样的操作通常需要线性时间(O(n) 时间复杂度)。

某些方法也可能不直接操作特定索引位置的元素,而是基于其他条件进行操作,例如过滤器或映射函数。

因此,区分有无索引的主要区别在于对元素的访问方式和操作效率。有索引的数据结构通常支持快速随机访问,而无索引的数据结构通常需要顺序访问或者基于其他条件来操作元素

System.out.println(st);: 在 accept 方法中定义了对集合中每个元素的操作,这里是打印每个元素。

除此之外,我还对正则表达式更加了解,在以前学习C语言的时候我常常觉得去匹配或者配对字符串的方法只有遍历然后做对比,但是通过使用正则表达式,我会觉得更加方便,例如匹配数字的开头或者字符串格式,这些工作通过使用正则表达式使得几十分钟的查询和配对的事情变得几秒钟就能解决,大大提高了代码的效率和程序员的精力,所以我认为发明更加便捷是方式在当今AI盛行的社会下程序员能打败AI的途径之一。

(3)采坑心得:虽然我没写出什么,但是我觉得要注重细节,比如输入方法的问题,我之前一直输入会读入下一行的空格,但是经过同学的帮助,我发现在输入和输出上面都有很大y异同

除此之外,对于正则表达式的运用过程中,我发现除了匹配之外,更多的是捕捉,因此我会在接下来的学习中多运用正则表达式的一些精髓,以下是我在正则表达式中的踩坑心得贪婪匹配:默认情况下,正则表达式会尽可能匹配更长的字符串。如果不想匹配最长的字符串,可以使用非贪婪量词(如*?、+?、{n,m}?)来匹配最短的字符串。

特殊字符转义:正则表达式中有些字符具有特殊含义,如.、*、+等,如果想要匹配它们的字面值,需要使用\进行转义。

字符类的范围:在字符类中使用范围时要注意ASCII编码顺序,例如[A-Za-z]可以匹配大小写字母,但[a-Z]是错误的范围。

边界匹配:使用边界匹配符号时,如^和$,要确保它们被正确放置,否则可能导致匹配失败或匹配到不符合预期的结果。

预定义字符类的使用:使用预定义字符类时要注意其适用范围,如\d匹配的是数字字符,不包括符号、小数点等。

分组的优先级:分组在正则表达式中具有优先级,如果想要改变默认的优先级,可以使用括号来明确分组的范围。

正向预查和负向预查:预查是零宽度匹配,匹配的是位置而不是字符本身,要注意预查的位置和匹配内容,避免出现匹配不符合预期的情况。

性能考虑:正则表达式的效率可能会受到输入字符串的长度和复杂度的影响,需要根据实际情况进行优化,避免出现性能问题。

(4)改进建议:在对一些高频率使用的方法编码时,我认为应该创建一个单独的类来实现,这样不仅能更高效地解决问题,还能将代码简化,大大提高了代码的可读性。理解基本概念:Java是一门面向对象的编程语言,首先需要理解面向对象编程的基本概念,如类、对象、继承、多态等。

掌握语法:学习Java需要熟悉其语法规则,包括变量、数据类型、运算符、流程控制语句等,这些是编写Java程序的基础。

编程实践:通过实际编程项目来巩固所学知识,可以从简单的程序开始,逐渐增加复杂度,这有助于加深对Java编程的理解和掌握。

阅读文档:Java有详细的官方文档和教程,可以通过阅读文档来了解Java的各种特性和API的使用方法,这对于解决问题和提高编程效率非常有帮助。

多练习调试:在编写代码时经常会遇到错误,要学会通过调试工具找出问题并进行修复,同时要注意编写清晰、简洁的代码以提高可读性和维护性。

(5)总结:

理解问题的本质:有时候做错题目是因为没有完全理解问题的要求。重温题目,确保理解每个要求和限制条件。

仔细阅读文档和资料:Java有很多文档和教程,重点是理解核心概念。深入阅读文档能够帮助更好地理解和应用Java的特性。

积极动手实践:练习是学习的关键。多写代码,多做练习题,通过实践来加深对Java知识的理解和应用。

查找和理解错误:当做错题目时,不要气馁,而是要耐心查找错误并理解其原因。错误信息、调试器和打印语句都是很有用的工具。

学会向他人请教:有时候别人的观点和解释能够帮助我们更好地理解问题。不要害羞,向老师、同学或者在线社区寻求帮助。

逐步提高难度:先从简单的题目开始,逐渐增加难度。这样可以建立起对基础知识的扎实理解,并且逐步提高解决问题的能力。

保持耐心和毅力:学习编程是一个持续的过程,不要急于求成。保持耐心,坚持不懈,相信自己的能力。

记录和总结:在做错题目后,记得记录下错误和正确的解法。这样可以形成一个学习笔记,帮助巩固知识点。

第一次至第三次PTAJava大作业分析的更多相关文章

  1. python第三次周末大作业

    ''' s18第三周周末⼤作业 模拟博客园系统: 1. 启动程序, 显⽰菜单列表 菜单: 1. 登录 2. 注册 3. ⽂章 4. ⽇记 5. 退出 2. ⽤户输入选项, ⽂章和⽇记必须在登录后才可以 ...

  2. JAVA pta 前三次大作业回顾与分析

    一.前言:总结三次题目集的知识点.题量.难度等情况 今年初次接触java,通过这三次大作业的练习,我对java有了一定的认识,相比于其他编程语言来说,java更复杂,要求也更严谨,需要掌握的知识也更多 ...

  3. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  4. c++小学期大作业攻略(三)用户系统

    Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...

  5. CSAPP HITICS 大作业 hello's P2P by zsz

    摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知 ...

  6. OO前三次作业分析

    一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确 ...

  7. OO第三次博客作业——规格

    OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  8. < JAVA - 大作业(2)仿qq即时通讯软件 >

    < JAVA - 大作业(2)仿qq即时通讯软件 > 背景 JAVA上机大作业:设计一个仿qq即时通讯软件 任务简要叙述:设计一款仿QQ的个人用户即时通讯软件,能够实现注册,登陆,与好友聊 ...

  9. 大二小学期C#资产管理大作业小记

    说明 这个程序是我大二夏季学期(俗称小学期)用Visual Studio + C#写的<资产管理>大作业.这个项目非常简单,就是用C#写出一个UI界面,并连接数据库进行增删改查.这是我第一 ...

  10. <JAVA - 大作业(1)文本编辑器 >

    <JAVA - 大作业(1)文本编辑器 > 背景 JAVA上机大作业:qq / 代码评价系统 第一次上机主题是练习JAVA自带的GUI图形化编程 目的:实现一个跟window10记事本界面 ...

随机推荐

  1. redis+lua脚本实现接口限流

    写在前面 在多线程的情况下对一个接口进行访问,如果访问次数过大,且没有缓存存在的情况下大量的请求打到数据库可能会存在数据库宕机,从而造成服务的不可用性.往往我们需要对其进行限流操作用来保证服务的高可用 ...

  2. 力扣1097(MySQL)-游戏玩法分析Ⅴ(困难)

    题目: 我们将玩家的安装日期定义为该玩家的第一个登录日. 我们还将某个日期 X 的第 1 天留存时间定义为安装日期为 X 的玩家的数量,他们在 X 之后的一天重新登录,除以安装日期为 X 的玩家的数量 ...

  3. watch对比computed

    总结:      computed和watch之间的区别:             1.computed能完成的功能,Watch都可以实现             2.watch能完成的功能,comp ...

  4. Pygame安装以及解决问题:Try to run this command from the system terminal. Make sure that you use the correct version of 'pip......

    在这里记录一下我的安装过程: 1.首先找到自己python程序安装目录下的Scripts文件夹(里面有pip这里面): 2.使用快捷键win + R 打开终端,先进入到安装python的盘符,然后进入 ...

  5. 微信、企微小程序使用taro对位置权限进行处理

    1.功能 当用户未授权地理位置权限时,引导用户开启地理位置权限,区别于之前的uni处理,uni的处理 的处理没有手机系统关闭位置权限的处理,但是uni文章中对于打开位置权限后重新返回小程序有做权限重获 ...

  6. [FAQ] dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib

    通过 ls -al /usr/local/opt 可以看到 icu4c 链接的不是 libicui18n.64.dylib. 一般是 node 版本问题会出现该提示,通过观察版本大小,决定是升级还是使 ...

  7. [PHP] 自定义 laravel/passport 的误区讲解

    Passport 的 Client 模型对应用户是默认的 User 模型.使用的 guards 是 api. 如果你发现自定义 passport 时总是调试不成功,那么很有可能是以下原因. /** * ...

  8. MAUI 自定义绘图入门

    在2022的5月份,某软正式发布了 MAUI 跨平台 UI 框架.我本来想着趁六一儿童节放假来写几篇关于 MAUI 入门的博客,可惜发现我不擅长写很入门的博客.再加上 MAUI 似乎是为了赶发布日期而 ...

  9. go和c#实现斐波那契数列

    首先通过C#实现斐波那契数列: using System.Threading.Channels; namespace App001 { internal class Program { static ...

  10. 后端每日一题 2:DNS 解析过程

    本文首发于公众号:腐烂的橘子 本文梗概: DNS 是什么,有什么作用 一条 DNS 记录是什么样的 DNS 域名解析原理 DNS 服务器如何抵御攻击 DNS 是什么,有什么作用 DNS(Domain ...