Java基础入门15:算法、正则表达式、异常
算法(选择排序、冒泡排序、二分查找)
选择排序
每轮选择当前位置,开始找出后面的较小值与该位置交换。
选择排序的关键:
确定总共需要选择几轮:数组的长度-1。
控制每轮从以前位置为基准,与后面元素选择几次。
冒泡排序
每次从数组中找出最大值放在数组的后面去。
实现冒泡排序的关键步骤分析:
确定总共需要做几轮:数组的长度-1。
当前位置大于后一个位置则交换数据。
package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test1 {public static void main(String[] args) {//选择排序int[] arr = {12,14,23,11,21,5,2,8,9,29,19,10};for (int i = 0; i < arr.length - 1; i++) {for (int j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {int temp = arr[j];arr[j] = arr[i];arr[i] = temp;}}}System.out.println(Arrays.toString(arr));}}package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test2 {public static void main(String[] args) {//冒泡排序int[] arr = {2,4,7,5,8,9,0,1};for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}}System.out.println(Arrays.toString(arr));}
}package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test3 {public static void main(String[] args) {//选择排序int[] arr = {12,14,23,11,21,5,2,8,9,29,19,10};//算法优化for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (arr[minIndex] > arr[j]) {minIndex = j;}}if (i != minIndex){int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}System.out.println(Arrays.toString(arr));}
}
二分查找法
package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test4 {public static void main(String[] args) {//二分查找法查找数组中的元素int[] arr = {12,13,15,36,57,99};System.out.println(binarySearch(arr, 13));System.out.println(Arrays.binarySearch(arr, 12));}public static int binarySearch(int[] arr,int data){int left = 0;int right = arr.length - 1;while (left <= right){int middle = (left+right)/2;if (data > arr[middle]){left = middle + 1;}else if (data < arr[middle]){right = middle - 1;}else {return middle;}}return -1;//特殊结果,代表没有找到数据,数组中不存在该数据}
}
正则表达式
正则表达式就是由一些特殊的字符组成,代表的是一个规则。
作用一:用来校验数据是否合法
作用二:在一段文本中查找满足要求的内容
package com.tichinajie.d2_regex;
/*
* 目标:体验一下使用正则表达式来校验数据格式的合法性。
需求:校验QQ号码是否正确,要求全部是数字,长度是(6-20)之间,不能以0开头。
* */
public class RegexTest1 {public static void main(String[] args) {System.out.println(checkQQ("242343456"));System.out.println(checkQQ("0482734234"));System.out.println(checkQQ(null));System.out.println(checkQQ("r3423rr565"));System.out.println(checkQQ("12345"));System.out.println(checkQQ("223423534556457567568676785745634523"));System.out.println("------------------------------------------------------------------------");System.out.println(checkQQ2("242343456"));System.out.println(checkQQ2("0482734234"));System.out.println(checkQQ2(null));System.out.println(checkQQ2("r3423rr565"));System.out.println(checkQQ2("12345"));System.out.println(checkQQ2("223423534556457567568676785745634523"));}//使用正则表达式public static boolean checkQQ2(String qq){return qq != null && qq.matches("[1-9]\\d{5,19}");}public static boolean checkQQ(String qq){//看是否满足基本条件if (qq ==null || qq.length() < 6 || qq.length() > 20 || qq.startsWith("0")){return false;}//判断是否有字母for (int i = 0; i < qq.length(); i++) {char ch = qq.charAt(i);if (ch < '0' || ch > '9'){return false;}}return true;}
}
正则表达式的书写规则
判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false。
正则表达式的是写规则:
字符类(只匹配单个字符)
预定义字符(只匹配单个字符)
数量词
package com.tichinajie.d2_regex;
//掌握正则表达式的书写规则
public class RegexTest2 {public static void main(String[] args) {//1、字符类(只能匹配单个字符)System.out.println("a".matches("[abc]")); //[abc]只能匹配a、b、cSystem.out.println("e".matches("[abcd]")); // falseSystem.out.println("d".matches("[^abc]")); //[^abc]不能是abcSystem.out.println("a".matches("[^abc]")); // falseSystem.out.println("b".matches("[a-zA-z]")); // [a-zA-Z] 只能是a-z A-Z的字符System.out.println("2".matches("[a-zA-Z]")); // falseSystem.out.println("k".matches("a-z && [^bc]")); // :a到z,除了b和cSystem.out.println("b".matches("a-z && [^bc]")); // falseSystem.out.println("ab".matches("[a-zA-Z0-9]"));//false 注意:以上带[内容]的规则都只能用于匹配单个字符//2、预定义字符(只能匹配单个字符).\d \D \s \s \w \WSystem.out.println("徐".matches("."));//.可以匹配任意字符System.out.println("徐徐".matches(".")); // false//\在Java中有特殊意义:\n换行\t代表一个缩进//如果在java中,希望\就是\必须转义System.out.println("\"");System.out.println("3".matches("\\d")); // \d: 0-9System.out.println("a".matches("\\d")); //falseSystem.out.println(" ".matches("\\s")); //s:代表一个空白字符System.out.println("a".matches("\\s")); // falseSystem.out.println("a".matches("\\S"));//\S:代表一个非空白字符System.out.println("".matches("\\S"));//falseSystem.out.println("a".matches("\\w"));//\w:[a-zA-Z_0-9]System.out.println("_".matches("\\w"));//trueSystem.out.println("".matches("\\w"));//falseSystem.out.println("徐".matches("\\W"));//[^\w]不能是a-zA-Z_0-9System.out.println("a".matches("\\W"));//falseSystem.out.println("23232".matches("\\d"));//false注意:以上预定义字符都只能匹配单个字符//3、数量词:? * + {n} {n,} {n,m}System.out.println("a".matches("\\w?"));//? 代表0次或1次System.out.println(" ".matches("\\w?"));//trueSystem.out.println("abc".matches("\\w?"));//falseSystem.out.println("abcI2".matches("\\w*"));//*代表0次或多次System.out.println("".matches("\\w*"));//trueSystem.out.println("abc12".matches("\\w*"));//falseSystem.out.println("a3c".matches("\\w{3}"));//{3}代表要正好是n次System.out.println("abcd".matches("\\w{3}"));//falseSystem.out.println("abcd".matches("\\w{3,}"));//{3,}代表是>=3次System.out.println("ab".matches("\\w{3,}"));//falseSystem.out.println("abcde徐".matches("\\w{3,}"));//falseSystem.out.println("abc232d".matches("\\w{3,9}"));//{3,9}代表是 大于等于3次,小于等于9次//4、其他几个常用的符号:(?i) 忽略大小写、 或:|、分组:()System.out.println("----------------------------------------------");System.out.println("abc".matches("(?i)abc"));//trueSystem.out.println("ABC".matches("(?i)abc"));//trueSystem.out.println("aBc".matches("a((?i)b)c"));//trueSystem.out.println("ABc".matches("a((?i)b)c"));//false//需求1:要求要么是3个小写字母,要么是3个数字。System.out.println("123".matches("\\d{3}|[a-z]{3}"));System.out.println("abc".matches("\\d{3}|[a-z]{3}"));System.out.println("aAc".matches("\\d{3}|[a-z]{3}"));//需求2:必须是“我爱“开头,中间可以是至少一个"编程“,最后至少是1个"666"System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+"));System.out.println("我爱编程编程6666666".matches("我爱(编程)+(666)+"));//false}
}
正则表达式的应用
1、用于校验数据
package com.tichinajie.d2_regex;import java.util.Scanner;public class RegexTest3 {public static void main(String[] args) {//正则表达式的应用一,校验数据格式是否合法checkEmail();}public static void checkPhone(){Scanner sc = new Scanner(System.in);while (true){System.out.println("请您输入您的电话号码(手机I座机):");String phone = sc.nextLine();//18676769999 010-3424242424 0104644535if(phone.matches( "(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})")){System.out.println("您输入的号码格式正确~~~");break;}else {System.out.println("您输入的号码格式不正确~~~");}}}public static void checkEmail(){while (true) {System.out.println("请您输入您的邮箱:");Scanner sc = new Scanner(System.in);String email = sc.nextLine();/*** dlei0009@163.com*25143242@qq.com*itheima@itcast.com.cn*/if(email.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")){System.out.println("您输入的邮箱格式正确~~~");break;}else{System.out.println("您输入的邮箱格式不正确~~~");}}}
}
2、用于查找信息
package com.tichinajie.d2_regex;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexTest4 {public static void main(String[] args) {//使用正则表达式method1();}//需求1:从以下内容中爬取出,手机,邮箱,座机、400电话等信息。public static void method1() {String data = "来黑马程序员学习Java,\n" +"电话:1866668888,18699997777\n" +"或者联系邮箱:boniu@itcast.cn,\n" +"座机电话:01036517895,010-98951256\n" +"邮箱:bozai@itcast.cn,\n" +"邮箱:dlei0009@163.com,\n" +"热线电话: 400-618-9090,400-618-4000,4006184000,4006189090";//1、定义爬取规则String regex = "(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})|\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}"+ "|(400-?\\d{3,7}-?\\d{3,7})";//2、把正则表达式封装成一个Pattern对象Pattern pattern = Pattern.compile(regex);//3、通过pattern对象去获取查找内容的匹配器对象。Matcher matcher = pattern.matcher(data);//4、定义一个循环开始爬取信息while (matcher.find()) {String rs = matcher.group();//获取到了找到的内容了。System.out.println(rs);}}
}
3、用于搜索替换、分割内容
正则表达式用于搜索替换、分割内容,需要结合String提供的如下方法完成:
package com.tichinajie.d2_regex;import java.util.Arrays;/***目标:掌握使用正则表达式做搜索替换,内容分割。*/
public class RegexTest5 {public static void main(String[] args) {//1、public String replaceAll(String regex,String newStr):按照正则表达式匹配的内容进行替换//需求1:请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中间的非中文字符替换成"-"String s1="古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";System.out.println(s1.replaceAll("\\w+","-"));//需求2(拓展):某语音系统,收到一个口吃的人说的“我我我喜欢编编编编编编编编编编编编程程程!”,需要优化成“我喜欢编程!"。String s2="我我我喜欢编编编编编编编编编编编编程程程";/***(.)一组:.匹配任意字符的。*\\:为这个组声明一个组号:1号*+:声明必须是重复的字*$1可以去到第1组代表的那个重复的字*/System.out.println(s2.replaceAll("(.)\\1+","$1"));//2、public String.[]split(String regex.):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。//需求1:请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs.42425卡尔扎巴,中的人名获取出来。String s3="古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";String[] names = s3.split("\\w+");System.out.println(Arrays.toString(names));}
}
异常
异常的体系
Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,Sun公司会把这些问题封装成Error对象给出来,说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题。
1、运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)。
2、编译时异常:编译阶段就会出现错误提醒的(如:日期解析异常)。
抛出异常(throws)
在方法上使用throws:关键字,可以将方法内部出现的异常抛出去给调用者处理。
捕获异常(try...catch)
直接捕获程序出现的异常
package com.tichinajie.d3_exception;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*
* 目标:认识异常
* */
public class ExceptionTest1 {public static void main(String[] args) throws ParseException {// Integer.valueOf("abc");
// int[] arr = {11, 22, 33};
// System.out.println(arr[5]);SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");// Date d = null;
// try {
// d = sdf.parse("2028-11-11 10:24");
// } catch (ParseException e) {
// throw new RuntimeException(e);
// }System.out.println(d);}
}
自定义异常
Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。
自定义异常的种类
package com.tichinajie.d3_exception;//1、必须让这个类继承自RunTimeException,才能成为一个运行时异常类
public class AgeIllegalRuntimeException extends RuntimeException {public AgeIllegalRuntimeException() {}public AgeIllegalRuntimeException(String message) {super(message);}
}package com.tichinajie.d3_exception;//1、必须让这个类继承自RunTimeException,才能成为一个运行时异常类
public class AgeIllegalException extends RuntimeException {public AgeIllegalException() {}public AgeIllegalException(String message) {super(message);}
}package com.tichinajie.d3_exception;
/*
* 目标:掌握自定义异常,异常的应用
* */
public class ExceptionTest2 {public static void main(String[] args) {//需求:保存一个合法的年龄try{saveAge(15) ;System.out.println("底层执行成功的!");} catch (Exception e) {e.printStackTrace();System.out.println("底层出现了bug!");}try{saveAge2(25);System.out.println("saveAge2底层执行是成功的!");} catch (AgeIllegalException e){e.printStackTrace();System.out.println("saveAge2底层执行是出现bug的!");}}public static void saveAge2(int age) throws AgeIllegalException{if(age > 0 && age < 150){System.out.println("年龄被成功保存:" + age);} else {//用一个异常对象封装这个问题//throw抛出去这个异常对象//throws 用在方法上,抛出方法内部的异常throw new AgeIllegalException("/age is illegal, your age is " + age);}}public static void saveAge(int age){if(age > 0 && age < 150){System.out.println("年龄被成功保存:" + age);} else {//用一个异常对象封装这个问题//throw抛出去这个异常对象throw new AgeIllegalRuntimeException("/age is illegal, your age is " + age);}}
}
异常的处理
开发中对于异常的常见处理方式:
package com.tichinajie.d3_exception;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*
* 目标异常处理
* */
public class ExceptionTest3 {public static void main(String[] args) {try {test1();} catch (FileNotFoundException e) {System.out.println("您要找的文件不存在~~");throw new RuntimeException(e);//打印这个异常对象的信息,记录下来} catch (ParseException e) {System.out.println("您要解析的时间有问题~~");throw new RuntimeException(e);//打印这个异常对象的信息,记录下来}}private static void test1() throws FileNotFoundException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");System.out.println(d);test2();}public static void test2() throws FileNotFoundException {//读取文件的InputStream is = new FileInputStream("D:/meinv.png");}
}package com.tichinajie.d3_exception;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*
* 目标异常处理
* */
public class ExceptionTest3_2 {public static void main(String[] args) {try {test1();} catch (Exception e) {System.out.println("您要找的文件不存在~~");e.printStackTrace();//打印这个异常对象的信息,记录下来}}private static void test1() throws Exception {SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");System.out.println(d);test2();}public static void test2() throws Exception {//读取文件的InputStream is = new FileInputStream("D:/meinv.png");}
}package com.tichinajie.d3_exception;import java.util.Scanner;public class ExceptionTest4 {public static void main(String[] args) {//需求:调用一个方法,让用户输入一个合适的价格返回为止while (true) {//尝试修复try {System.out.println(getMoney());} catch (Exception e) {System.out.println("请您输入合法的数字!!");}}}public static double getMoney(){Scanner sc = new Scanner(System.in);System.out.println("请输入合适的价格:");double money = sc.nextDouble();if (money >= 0){return money;}else {System.out.println("你输入的价格不合适");}return money;}
}
(本章图片均来自于黑马程序员视频)
相关文章:

Java基础入门15:算法、正则表达式、异常
算法(选择排序、冒泡排序、二分查找) 选择排序 每轮选择当前位置,开始找出后面的较小值与该位置交换。 选择排序的关键: 确定总共需要选择几轮:数组的长度-1。 控制每轮从以前位置为基准,与后面元素选择…...

SpringBoot响应式编程 WebFlux入门教程
🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 🔥 微信:zsqtcyw 联系我领取学习资料 …...

LeetCode 383. 赎金信
题目 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&…...

python绘制电路图
要在 Python 中实现电路图,你可以使用一些专门的库来创建和可视化电路图。一个常用的库是 schemdraw,它可以用来绘制电路图,并支持多种电气组件和符号。 下面是一个使用 schemdraw 库绘制简单电路图的示例: 安装 schemdraw 库&am…...

Vue3 Suspense 和 defineAsyncComponent 结合使用方法
Suspense:用于协调对组件树中嵌套的异步依赖的处理。 defineAsyncComponent:定义一个异步组件,它在运行时是懒加载的。参数可以是一个异步加载函数,或是对加载行为进行更具体定制的一个选项对象。 异步组件的好处:使…...

GitHub中Codespace怎么使用;LLM模拟初始化;MLP:全连接神经网络的并行执行
目录 PyUnit unittest是什么 unittest怎么使用 GitHub中Codespace怎么使用 测试常用功能 LLM模拟初始化 参数解释 类属性设置 总结 MLP:全连接神经网络的并行执行 假设 代码解释 注意事项 PyUnit unittest是什么 unittest是Python的内置单元测试框架,原名PyUn…...

【rh】rh项目部署
【fastadmin】 1、项目先clone到本地,其中web为h5前端使用(gitclone后,把web内容放进去再提交),其余为项目后端使用 2、安装本地环境,项目跑起来,步骤如下: 1)查春.git 和 composer,json 版本信…...

VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection Abstract 摘要部分,作者首先指出了3D点云中目标检测的重要性,在自动驾驶导航、家政机器人以及增强现实和虚拟现实等多个领域有重要的作用。然后,提到了现有方法的…...

结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141122350 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

LLM 量化算法AutoRound 0.3 发布及原理浅析
这里写自定义目录标题 AutoRound V0.3 特性原理浅析其他工作AutoRound 原理 AutoRound(https://github.com/intel/auto-round)在Llama3.1-8B-Instruct上效果明显优于AWQ/GPTQ等方法,在10个任务的平均准确率上我们以63.93%由于AWQ的63.15%和GP…...

汽车免拆诊断案例 | 2013款北京现代悦动车发动机偶尔无法起动
故障现象 一辆2013款北京现代悦动车,搭载G4FC发动机,累计行驶里程约为13.9万km。车主反映,发动机偶尔无法起动着机,断开点火开关,等待一会儿又可以起动着机。 故障诊断 接车后反复试车,当发动机无法起动着…...

React、AntD,封装动态表单
在React中使用Ant Design(简称AntD)来封装动态表单是一个常见的需求,特别是在需要灵活配置表单字段的场景下。以下是一个基本的步骤和示例代码,展示如何使用React和AntD来封装一个动态表单。 步骤 1: 安装必要的库 首先,确保你的项目中已经安装了react和antd。如果还没有…...

【Linux基础】Linux中的开发工具(3)--make/makefile和git的使用
目录 前言一,Linux项目自动化构建工具-make/makefile1. 背景2. 依赖关系和依赖方法3. 项目清理4. 使用方法和原理5. .PHONY的作用6. makefile中符号的使用 二,进度条的实现1. 理解回车换行2. 理解行缓冲区3. 版本14. 版本2 三,Linux上git的使…...

过滤了字母、数字、_、$的webshell命令执行技巧
目录 对于php5以上首先要解决的问题有 解决技巧 1.code长度小于35位 2.没有字母、数字、_ 、$ 3.怎么把文件放进服务器 4.怎么执行文件里面的内容 1.执行Linux命令 2.执行文件里面的shell命令 5.构造完整的code参数 6.我们还可以通过修改文件里面shell命令,…...

python-A+B again
[题目描述] 小理有一个非常简单的问题给你,给你两个整数 A 和 B,你的任务是计算 AB。输入格式: 输入共 2∗T1 行。 输入的第一行包含一个整数 T 表示测试实例的个数,然后 2∗T 行,分别表示 A 和 B 两个正整数。注意整数…...

C语言—函数递归
一、递归概念 递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。下面举一个例子: 上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,代码最终…...

结构开发笔记(四):solidworks软件(三):绘制36x36方块摄像头示意体
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141187797 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

【机器学习】Caltech-101的基本概念和使用方法以及Caltech-101和ImageNet的联系和区别
引言 Caltech-101数据集是一个广泛用于对象识别任务的数据库,它包含了大约9,000张图像,这些图像来自101个不同的对象类别。每个类别包含的图像数量大约在40到800张之间,大多数类别大约有50张图像。图像的分辨率大致为300200像素 文章目录 引言…...

mysql Ubuntu安装与远程连接配置
一、安装(Ubuntu22环境安装mysql8) 这里使用Xshell链接Ubuntu和mysql windows进行操作,特别提醒:安装之前建议对Ubuntu快照处理备份,避免安装中出错导致Ubuntu崩溃。 查看是否安装的有可以用指令:ps -ef|…...

c语言中比较特殊的输入格式
目录 一.%[ ] 格式说明符 1.基本用法 (1)读取字母字符: (2)读取数字字符: (3)读取所有字符直到遇到空格: (4)读取直到换行符: 2.使用范围和组合: 3.^ 取反操作 4.注意事项 (1). 字符范围的正确表示 (2). 避免字符集中的特殊字符冲突 (3).避免空字符集 (4). 输入长…...

远程命令行控制SSH
第一次接触SSH是ROS小车作为服务端,通过ubuntu电脑客户端访问。因为机器人接键盘和屏幕操作起来不方便,所以使用SSH进行连接,方便对小车的操作。 1.服务端安装 打开终端查看ssh是否安装 sudo service ssh status 如果未安装 sudo apt upd…...

钢铁百科:A572Gr60和SA572Gr60材质分析、A572Gr60和SA572Gr60简介
A572Gr60和SA572Gr60是两种常用的结构钢板,它们在材质、执行标准、化学成分、力学性能、交货状态、应用范围和常用规格方面有所不同。 材质: A572Gr60:属于美国材料与试验协会(ASTM)标准下的A572系列高性能结构钢&…...

一次sql请求,返回分页数据和总条数
日常搬砖,总少不了需要获取分页数据和总行数。 一直以来的实践是编码两次sql请求,分别拉分页数据和totalCount。 最近我在思考: 常规实践为什么不是 在一次sql请求中中执行多次sql查询或多次更新,显而易见的优势: ① 能…...

2.5 pyautogui 实现微信自动回复
第四节:实战微信自动回复 课程目标 学习如何通过pyautogui完成微信自动回复 课程内容 编码实现 import pyautogui as pg import time from pyautogui import ImageNotFoundException import pyperclip from cnocr import CnOcr import random ocr CnOcr() msg…...

观存储历史,论数据未来
数据存储 这几天我反复观看了腾讯云社区的《中国数据库前世今生》纪录片,每次的感受都大相径庭。以下是我在这段时间里对纪录片的两个不同感想,希望感兴趣的小伙伴们也能去观看一番。 一个是关于国产数据库的发展趋势的探讨:https://blog.c…...

linux:对目录的操作
一、对目录操作 1,打开目标目录 2.读取目录,, 3.关闭目录 目录 当文件看,只不过操作函数和操作文件函数不一样。 *1.opendir DIR *opendir(const char *name); 功能:打开一个目录获得一个目录流指针 参数:name:目录名 返回值…...

详解Redis 高可用的方式 Redis Cluster
Redis 高可用方式 Redis 提供了多种高可用性方案,主要包括以下几种方式: 主从复制(Replication) 主从复制是最基本的高可用性方案,通过将数据从一个主节点复制到多个从节点来实现数据的冗余和读写分离。主节点负责所…...

$clog2(1)=0
项目场景: 写ip 时, 使用参数化的方式实现2w1r 时,出现计算读返回index 时,减下溢! 问题描述 verilog中会使用parameter 参数化,例如使用dpth 和$clog2(dpth)addr 。 常见的写法没有什么问题。 module …...

开发学习日记1
用这个系列博客记录下学习开发的一些小收获 git的使用: 说来惭愧,学到了大二,git的使用还是一团糟,记录一下如何使用git进行团队合作开发 当要加入其他人的项目时首先你要创建自己的分支(克隆一下其他分支ÿ…...

孙宇晨领航波场TRON:引领数字资产迈向崭新纪元
在风起云涌的数字资产领域,孙宇晨这个名字始终与创新、突破和引领紧密相连。作为波场TRON的创始人,他不仅是一位远见卓识的领导者,更是推动数字资产迈向新纪元的坚实力量。 自波场TRON诞生以来,孙宇晨便以其敏锐的洞察力…...