首页 > 编程语言 >Java学习笔记——第十四天

Java学习笔记——第十四天

时间:2024-03-13 11:57:44浏览次数:32  
标签:arr Java String 正则表达式 笔记 第十四天 查找 数组 异常

常见算法

什么是算法

算法是解决某个实际问题的过程和方法。

排序算法

冒泡排序

每次都从数组中找出最大值放到数组的后面去。

伪代码(升序排序):

输入:未排序的数组arr,数组长度length
输出:无输出,数组arr原地实现排序
1 for (i = 0; i < length - 1; i++)
2     for (j = 0; j < length - i - 1; j++)
3         if (arr[i] > arr[j])
4             swap(arr[i], arr[i + 1])
5         end if
6     end for
7 end for

选择排序

每轮选择当前位置,来找出后面的较小值与该位置交换。

伪代码(升序排序):

输入:未排序的数组arr,数组长度length
输出:无输出,数组arr原地实现排序
1 for (i = 0; i < length - 1; i++)
2     for (j = i + 1; j < length - 1; j++)
3         if (arr[i] > arr[j])
4             swap(arr[i], arr[j])
5         end if
6     end for
7 end for

查找算法

基本查找/顺序查找

遍历数组,依次比较。

在数据量特别大时,基本查找性能很差。

二分查找/折半查找

  1. 将数组排序。
  2. 二分法查找。

伪代码:

输入:带查找数组arr,数组长度length,待查找值data
输出:待查找值的索引index,若数组中没有待查找值,则输出None
1  left = 0, right = length - 1
2  while (left <= right)
3      middle = floor((left + right) / 2)
4      if (data < arr[middle])
5          left = middle - 1
6      else if (data > arr[middle])
7          right = middle + 1
8      else
9          return middle
10     end if
11 end while
12 return None

正则表达式

正则表达式概述

正则表达式是什么

正则表达式是由一些特定的字符组成的,代表的是一个规则。

正则表达式的作用

  • 用来校验数据格式是否合法。
  • 在一段文本中查找满足要求的内容。
  • 在一段文本中搜索替换、分割内容。

String提供的与正则表达式相关的方法

方法名 说明
public boolean matches(String regex) 判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false
public String replaceAll(String regex , String newStr) 按照正则表达式匹配的内容进行替换
public String[] split(String regex) 按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。

正则表达式的书写规则

字符类(只匹配单个字符):

正则表达式 含义
[abc] 只能是a, b, 或c
[^abc] 除了a, b, c之外的任何字符
[a-zA-Z] a到z A到Z,包括(范围)
[a-d[m-p]] a到d,或m到p
[a-z&&[def]] d, e, 或f(交集)
[a-z&&[^bc]] a到z,除了b和c(等同于[ad-z])
[a-z&&[^m-p]] a到z,除了m到p(等同于[a-lq-z])

预定义字符(只匹配单个字符):

正则表达式 含义
. 任何字符
\d 一个数字: [0-9]
\D 非数字: [^0-9]
\s 一个空白字符:[ \t\n\x0B\f\r]
\S 非空白字符: [^\s]
\w [a-zA-Z_0-9]
\W 一个非单词、非数字、非下划线字符:[^\w]

数量词:

正则表达式 含义
X? 匹配X,一次或0次
X* 匹配X,0次或多次
X+ 匹配X,一次或多次
X 匹配X,正好n次
X 匹配X,至少n次
X 匹配X,n次到m次,包括n次和m次

其他:

正则表达式 含义
[] 里面的内容出现一次
^ 取反
&& 交集,不能写单个的&
() 分组
| 写在方括号外面表示并集
(?i) 忽略后面字符的大小写
\ 转义字符

注意:\\.代表对.的转义

补充:(任意字符)\\1代表分组编号,应用如下:

String str = "我我我喜欢编编编编编编编编编程程程";
String s = str.replaceAll("(.)\\1+", "$1");
System.out.println(s);

输出为:

我喜欢编程

异常

认识异常

异常就是程序出现的问题。

异常的体系

异常的体系
  • Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来。开发过程中一般不会用到。
  • Exception:异常,它代表的是我们程序可能出现的问题,所以,我们通常会用Exception以及它的子类来封装程序出现的问题。
    • 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,但运行时出现的异常。(如:数组索引越界异常)
    • 编译时异常:编译阶段就会出现错误提醒的异常。(如:日期解析异常)

异常有什么用

  • 异常是用来查寻系统Bug的关键参考信息。
  • 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况。

自定义异常

Java无法为这个世界上全部的问题都提供异常类来代表, 如果开发者自己遇到了某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。

自定义运行时异常

  1. 定义一个异常类继承RuntimeException。
  2. 重写构造器。
  3. 通过throw new 异常类(xxx)来创建异常对象并抛出。

特点:编译阶段不报错,提醒不强烈,运行时才可能出现。

自定义编译时异常

  1. 定义一个异常类继承Exception。
  2. 重写构造器。
  3. 通过throw new 异常类(xxx)来创建异常对象并抛出。

特点:编译阶段就报错,提醒更加强烈。

throw和throws

  • throw用在方法内,抛出去这个异常对象。
  • throws用在方法上,抛出方法内部的异常。

异常的处理

代码层面的处理

抛出异常(throws)

在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理。

方法 throws 异常1, 异常2, 异常3... {
	...
}

// 推荐方式
方法 throws Exception {
    ...
}
// Exception代表可以捕获一切异常

捕获异常(try…catch)

直接捕获程序出现的异常。

try{
    // 监视可能出现异常的代码
} catch (异常类型1 变量) {
    // 处理异常
} catch (异常类型2 变量) {
    // 处理异常
}...

// 推荐方式
try{
    // 可能出现异常的代码
} catch (Exception e) {
    // 处理异常
}
// Exception代表可以捕获一切异常

开发中对于异常的常见处理方法

下层方法将异常抛出给调用者,逐层抛出直到最外层方法,最外层方法有两种处理方式:

  1. 捕获异常,记录异常并响应合适的信息给用户。
  2. 捕获异常,尝试重新修复。
  • 抛出异常时,都只抛出Exception即可。

B D BCD C CD D C ABCD ABD

标签:arr,Java,String,正则表达式,笔记,第十四天,查找,数组,异常
From: https://www.cnblogs.com/zgg1h/p/18070303

相关文章

  • Vue学习笔记--浏览器存储(local Storage + session Storage)
    浏览器存储:意思就是本地缓存信息localStorage示例一:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><ti......
  • JS 链表 - 笔记
    代码:classListNode{/***@constructor*@param{number}val*@param{ListNode}next*/constructor(val,next){this.val=(val===undefined?0:val);this.next=(next===undefined?null:next);......
  • 基于java+springboot教师工作量管理系统
    基于java+springboot教师工作量管理系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis工具:IDEA/Ecilpse、Navicat、Maven系统展示后台展示系统简介本教师工作量管理系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理公告信息以及公告......
  • Python学习笔记-Flask实现简单的投票程序
    1.导入flask包 fromflaskimportFlask,jsonify,abort,make_response,request,render_template2.初始化Flask应用:app=Flask(__name__)3. 定义投票种类data=[{'id':0,'name':'劳动节','num':0},{'id':1,'name&#......
  • C#集合和数据结构,随笔记录
    C#集合和数据结构System.Collections命名空间包含接口和类,这些接口和类定义各种对象(如列表/链表、位数组、哈希表、队列和堆栈)的集合            System.Collections.Generic命名空间:所有集合都直接或间接基于ICollection接口列表类集合类型:集合类型基......
  • JavaScript学习--splice()函数入门与精通
    一、splice入门splice方法:通过删除(两个参数)或替换现有元素(三个参数)或者原地添加新的元素(三个参数)来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。参数:index——必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置(从1开始)。howmany——必需......
  • 浅谈JavaScript
    第一章JavaScript学前准备1.JavaScript简介(1)1992年Nombas的scriptease奠定了JavaScript思想理念;(2)受当时网速的限制,很多操作过程很漫长,如用户注册个账号,先提交到服务器去验证合法性,然后再返回给用户。Netscape发现了这个问题并开发了JavaScript语言,同时微软也开发了一个叫J......
  • C语言自学笔记4----C语言存储类
    C语言存储类存储类定义C程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出C程序中可用的存储类:autoregisterstaticexternauto存储类auto存储类是所有局部变量默认的存储类。{intmount;autointmonth;}上面的示......
  • 在Java中如何通过优化代码来节省内存
    Java程序的一个常见问题是高内存使用率,这会导致性能问题甚至崩溃。因此,需要使用内存节省技术来优化Java代码并减少内存使用非常重要。选择正确的数据类型:使用适当大小的数据类型可以避免不必要的内存浪费。例如,如果你知道一个整数的取值范围在-128到127之间,那么使用byte类......
  • 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外
    1.简介上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是相对前边做一个简单的总结分享给小伙伴们或者童鞋们。废话不多数,直接进入......