Java学习笔记(四)——正则表达式

文章目录

  • 正则表达式
    • 基本规则
      • 字符类(只匹配一个字符)
      • 预定义字符(只匹配一个字符)
      • 数量词
      • 练习
      • 正则表达式插件
    • 爬虫
      • 利用正则表达式获取想要的内容
      • 爬取网络信息
      • 练习
      • 有条件的爬取
      • 贪婪爬取
      • 非贪婪爬取
      • 正则表达式在字符串中的使用
    • 分组
      • 捕获分组
      • 正则表达式外部使用
      • 非捕获分组
      • 正则表达式忽略大小写

正则表达式

正则表达式的作用:

  • 校验字符串是否满足规则
  • 在一段文本中查找满足要求的内容

基本规则

字符类(只匹配一个字符)

表达式说明
[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]]a-z和def的交集,为:d、e、f

在这里插入图片描述

public class test57 {public static void main(String[] args) {System.out.println("ab".matches("[abc]"));  //falseSystem.out.println("ab".matches("[abc][abc]"));  //true//一个&在正则表达式中是一个符号System.out.println("&".matches("[a-z&[abc]]"));  //trueSystem.out.println("0".matches("a-z&&[abc]"));  //false 0不在a-z与abc的交集里面}
}

预定义字符(只匹配一个字符)

表达式说明
.任何字符
\d一个数字[0-9]
\D非数字
\s一个空白字符[\t\n\x0B\f\r]
\S非空白字符
\w[a-zA-Z_0-9]英文、数字、下划线
\W[^\w]

在这里插入图片描述

\ 转义字符,改变后面字符的含义

\ 前面的\是一个转义字符,把后面的\变成一个普通的无含义字符(路径)

public class test57 {public static void main(String[] args) {//  \   转义字符,改变后面字符的含义//  \\  前面的\是一个转义字符,把后面的\变成一个普通的无含义字符(路径)System.out.println("\"");  //"System.out.println("3".matches("\\d"));  //trueSystem.out.println("2333".matches("\\d\\d\\d\\d"));  //true}
}

数量词

表达式说明
X?X,1次或0次
X*X,0次或多次
X+X,1次或多次
X{n}X,正好n次
X{n,}X,至少n次
X{n,m}X,至少n但不超过m次

在这里插入图片描述

练习

需求1:

请编写正则表达式验证用户输入的手机号码是否满足要求

请编写正则表达式验证用户输入的邮箱号是否满足要求

请编写正则表达式验证用户输入的电话号码是否满足要求

验证手机号码 13112345678 13712345667 13945679027 139456790271

验证座机电话号码 020-2324242 02122442 027-42424 0712-3242434

验证邮箱号码 3232323@qq.com zhangsan@itcast.cnn dlei0009@163.com dlei0009@pci.com.cn

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test9 {public static void main(String[] args) {while(true){System.out.println("-----------请输入手机号/邮箱号/电话号-----------");Scanner sc=new Scanner(System.in);String str=sc.nextLine();if(str.equals("exit")){break;}System.out.println("-------------------验证中--------------------");System.out.println("-----------------验证结果为-------------------");//手机号:1[3-9]\\d{9}//第一部分:1 表示手机号码只能以1开头//第二部分:[3-9] 表示手机号码第二位只能是3-9之间的//第三部分:\\d{9} 表示任意数字可以出现9次,也只能出现9次//邮箱号:\\w+@[\\w&&[^_]]{2,6}(\\.[A-Za-z]{2,3}){1,2}//第一部分:@的左边 \\w+//      任意的字母数字下划线,至少出现一次就可以了//第二部分:@ 只能出现一次//第三部分://      3.1         .的左边[\\w&&[^_]]{2,6}//                  任意的字母加数字,总共出现2-6次(此时不能出现下划线)//      3.2         . \\.//      3.3         大写字母,小写字母都可以,只能出现2-3次[a-zA-Z]{2,3}//      我们可以把3.2和3.3看成一组,这一组可以出现1次或者两次//电话号:0\\d{2,3}-?[1-9]\\d{4,9}//一:区号@\\d{2,3}//      0:表示区号一定是以0开头的//      \\d{2,3}:表示区号从第二位开始可以是任意的数字,可以出现2到3次。//二:- ?表示次数,日次或一次//三:号码 号码的第一位也不能以日开头,从第二位开始可以是任意的数字,号码的总长度:5-10位String regex="(1[3-9]\\d{9})|(\\w+@[\\w&&[^_]]{2,6}(\\.[A-Za-z]{2,3}){1,2})|(0\\d{2,3}-?[1-9]\\d{4,9})";Pattern pattern=Pattern.compile(regex);Matcher matcher=pattern.matcher(str);if(matcher.find()){System.out.println("-----------------验证成功!-------------------");}else{System.out.println("-----------验证失败!提示:输入错误!------------");}}}
}

需求2:

请编写正则表达式验证用户名是否满足要求。要求:大小写字母,数字,下划线一共4-16位

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test10 {public static void main(String[] args) {//大小写字母,数字,下划线一共4-16位Scanner sc=new Scanner(System.in);String regex="\\w{4,16}";Pattern pattern= Pattern.compile(regex);while(true){String str=sc.nextLine();if(str.equals("exit")){break;}Matcher matcher=pattern.matcher(str);System.out.println(matcher.find());}}
}

需求3:

请编写正则表达式验证身份证号码是否满足要求。

简单要求:18位,前17位任意数字,最后一位可以是数字可以是大写或小写的x

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test11 {public static void main(String[] args) {//18位,前17位任意数字,最后一位可以是数字可以是大写或小写的xScanner sc=new Scanner(System.in);String regex="\\d{17}(\\d|X|x)";Pattern pattern=Pattern.compile(regex);while (true){String str=sc.nextLine();if(str.equals("exit")){break;}Matcher matcher=pattern.matcher(str);System.out.println(matcher.find());}}
}
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test11 {public static void main(String[] args) {//18位,前17位任意数字,最后一位可以是数字可以是大写或小写的xScanner sc=new Scanner(System.in);String regex="\\d{17}[\\dXx]";Pattern pattern=Pattern.compile(regex);while (true){String str=sc.nextLine();if(str.equals("exit")){break;}Matcher matcher=pattern.matcher(str);System.out.println(matcher.find());}}
}
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test11 {public static void main(String[] args) {//18位,前17位任意数字,最后一位可以是数字可以是大写或小写的xScanner sc=new Scanner(System.in);String regex="(?i)\\d{17}[\\dx]";Pattern pattern=Pattern.compile(regex);while (true){String str=sc.nextLine();if(str.equals("exit")){break;}Matcher matcher=pattern.matcher(str);System.out.println(matcher.find());}}
}

复杂要求:按照身份证号码的格式严格要求。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test12 {public static void main(String[] args) {//410801 1993 02 28 457x//前面6位:省份,市区,派出所等信息,第一位不能是0,后面5位是任意数字 [1-9]\\d{5}//年的前半段: 18 19 20 (18|19|20)//年的后半段: 任意数字出现两次 \\d{2}//月份: 01~ 09 10 11 12 0[1-9]|1[0-2]//日期: 01~09 10~19 20~29 30 31     0[1-9]|[12]\\d|[3][01]//后面四位: 任意数字出现3次 最后一位可以是数字也可以是大写x或者小写x \\d{3}[\\dXx]Scanner sc=new Scanner(System.in);String regex="[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|[3][01])\\d{3}[\\dXx]";Pattern pattern= Pattern.compile(regex);while(true){String str= sc.nextLine();if(str.equals("exit")){break;}Matcher matcher=pattern.matcher(str);System.out.println(matcher.find());}}
}

正则表达式插件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

爬虫

利用正则表达式获取想要的内容

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test1 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,"+ "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";Pattern pattern=Pattern.compile("Java\\d{0,2}");  //正则表达式对象Matcher matcher=pattern.matcher(str);  //文本匹配器对象while(matcher.find()){  //是否有满足规则的子串,如果为true,底层会记录子串的起始索引和结束索引+1System.out.println(matcher.group());  //返回满足规则的子串}}
}

爬取网络信息

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test2 {public static void main(String[] args) throws IOException {URL url=new URL("https://520zuowens.com/xiaoxue/1122109.html");  // 爬取信息的网址URLConnection urlConnection= url.openConnection();  // 建立连接BufferedReader br=new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));Pattern pattern=Pattern.compile("[1-9]\\d{17}");  // 正则表达式对象String str;while((str= br.readLine())!=null){Matcher matcher=pattern.matcher(str);while (matcher.find()){System.out.println(matcher.group());}}br.close();}
}

练习

需求:

​ 把下面文本中的座机电话,邮箱,手机号,热线都爬取出来。

来学习Java,

手机号:18512516758,18512508907,

联系邮箱:boniu@itcast.cn,

座机电话:01036517895,010-98951256

邮箱:bozai@itcast.cn,

热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090。

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test3 {public static void main(String[] args) throws IOException {String str="来学习Java,\n" +"手机号:18512516758,18512508907.\n" +"联系邮箱:boniu@itcast.cn,\n" +"座机电话:01036517895,010-98951256\n" +"邮箱:bozai@itcast.cn,\n" +"热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090。\n";byte[] bytes=str.getBytes();InputStream inputStream=new ByteArrayInputStream(bytes);BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));// 手机号的正则表达式:1[3-9]\\d{9}// 邮箱的正则表达式:\\w+@[\\w&&[^_]]{2,6}.[A-Za-z]{2,3}// 座机电话的正则表达式:0\\d{2,3}-?[1-9]\\d{4,9}// 热线电话正则表达式:400-?\\d{3}-?\\d{4}String regex="(1[3-9]\\d{9})|(\\w+@[\\w&&[^_]]{2,6}.[A-Za-z]{2,3})|(0\\d{2,3}-?[1-9]\\d{4,9})|(400-?\\d{3}-?\\d{4})";Pattern pattern=Pattern.compile(regex);String str1;while((str1=br.readLine())!=null){Matcher matcher=pattern.matcher(str1);while (matcher.find()){System.out.println(matcher.group().toString());}}}
}

有条件的爬取

需求:

​ 有如下文本,按要求爬取数据。

​ Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台。

需求1:

​ 爬取版本号为8,11.17的Java文本,但是只要Java,不显示版本号。

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test4 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";String regex="Java(?=8|11|17)";Pattern pattern=Pattern.compile(regex);Matcher matcher=pattern.matcher(str);while(matcher.find()){System.out.println(matcher.group());}}
}

忽略java大小写:

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test4 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是JAva8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是JaVa17,相信在未来不久JavA17也会逐渐登上历史舞台";String regex="((?i)Java)(?=8|11|17)";Pattern pattern=Pattern.compile(regex);Matcher matcher=pattern.matcher(str);while(matcher.find()){System.out.println(matcher.group());}}
}

需求2:

​ 爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test4 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";String regex="Java(8|11|17)";Pattern pattern=Pattern.compile(regex);Matcher matcher=pattern.matcher(str);while(matcher.find()){System.out.println(matcher.group());}}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test4 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";String regex="Java(?:8|11|17)";Pattern pattern=Pattern.compile(regex);Matcher matcher=pattern.matcher(str);while(matcher.find()){System.out.println(matcher.group());}}
}

需求3:

​ 爬取除了版本号为8,11,17的Java文本。

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test4 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";String regex="Java(?!8|11|17)";Pattern pattern=Pattern.compile(regex);Matcher matcher=pattern.matcher(str);while(matcher.find()){System.out.println(matcher.group());}}
}

贪婪爬取

只写+和表示贪婪匹配,如果在+和后面加问号表示非贪婪爬取

+? 非贪婪匹配

*? 非贪婪匹配

贪婪爬取:在爬取数据的时候尽可能的多获取数据

非贪婪爬取:在爬取数据的时候尽可能的少获取数据

举例:

如果获取数据:ab+

贪婪爬取获取结果:abbbbbbbbbbbb

如果获取数据:ab+?

非贪婪爬取获取结果:ab

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test5 {public static void main(String[] args) {String str = "Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa" +"经历了很多版木,目前企业中用的最多的是]ava8和]ava11,因为这两个是长期支持版木。" +"下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";String regex = "ab+";  // 贪婪爬取Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(str);while (matcher.find()) {System.out.println(matcher.group());}}
}

非贪婪爬取

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test5 {public static void main(String[] args) {String str = "Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa" +"经历了很多版木,目前企业中用的最多的是]ava8和]ava11,因为这两个是长期支持版木。" +"下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";String regex = "ab+?";  // 非贪婪爬取Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(str);while (matcher.find()) {System.out.println(matcher.group());}}
}

正则表达式在字符串中的使用

在这里插入图片描述

public class test6 {public static void main(String[] args) {String str="cjm是猪dqwefqwfqwfwq12312cjm是猪dqwefqwfqwfwq12312cjm是猪";// 方法底层也会创建文本解析器的对象// 从头开始读,满足条件的用第二个参数替换String result=str.replaceAll("[\\w&&[^_]&&[^cjm]]+","  !!!cjm是sqd的猪!!!  ");System.out.println(result);}
}

运行结果:cjm是猪 !!!cjm是sqd的猪!!! cjm是猪 !!!cjm是sqd的猪!!! cjm是猪

public class test6 {public static void main(String[] args) {String str="cjm是猪dqwefqwfqwfwq12312cjm是猪dqwefqwfqwfwq12312cjm是猪";String[] result=str.split("[\\w&&[^_]&&[^cjm]]+");for(int i=0;i<result.length;i++){System.out.println(result[i]);}}
}

运行结果:

cjm是猪
cjm是猪
cjm是猪

分组

捕获分组

可以获取每组中的内容反复使用。

在这里插入图片描述

需求1:判断一个字符串的开始字符和结束字符是否一致?只考虑一个字符

举例:a123a b456b 17891 &abc& a123b(false)

public class test7 {public static void main(String[] args) {// \\1表示第一个分组String regex="(.).+\\1";System.out.println("a123a".matches(regex));System.out.println("b456b".matches(regex));System.out.println("17891".matches(regex));System.out.println("&abc&".matches(regex));System.out.println("a123b".matches(regex));}
}

需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符

举例:abc123abc b456b 123789123 &!@abc&!@ abc123abd(false)

public class test7 {public static void main(String[] args) {// \\1表示第一个分组String regex="(.+).+\\1";System.out.println("abc123abc".matches(regex));System.out.println("b456b".matches(regex));System.out.println("123789123".matches(regex));System.out.println("&!@abc&!@".matches(regex));System.out.println("abc123abd".matches(regex));}
}

需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致

举例:aaa123aaa bbb456bbb 111789111 &&abc&&

public class test7 {public static void main(String[] args) {// (.):把首字母看做一组// \\2:把首字母拿出来再次使用// *:作用于\\2,表示后面重复的内容出现0次或多次String regex="((.)\\2*).+\\1";System.out.println("aaa123aaa".matches(regex));System.out.println("bbb456bbb".matches(regex));System.out.println("111789111".matches(regex));System.out.println("&&abc&&".matches(regex));}
}

正则表达式外部使用

在这里插入图片描述

需求:

​ 将字符串:我要学学编编编编程程程程程程。

​ 替换为:我要学编程

public class test8 {public static void main(String[] args) {String str = "我要学学编编编编程程程程程程";//  (.)表示把重复内容的第一个字符看做一组//  \\1表示第一字符再次出现//  + 至少一次//  $1 表示把正则表达式中第一组的内容,再拿出来用String result=str.replaceAll("(.)\\1+","$1");System.out.println(result);}
}

非捕获分组

使用非捕获分组的数据不占组号。

在这里插入图片描述

正则表达式忽略大小写

(?i) :表示忽略后面数据的大小写

//忽略abc的大小写
String regex = "(?i)abc";
//a需要一模一样,忽略bc的大小写
String regex = "a(?i)bc";
//ac需要一模一样,忽略b的大小写
String regex = "a((?i)b)c"; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MobaXterm SSH 免密登录配置

文章目录 1.简介2.SSH 免密登录配置第一步&#xff1a;点击 Session第二步&#xff1a;选择 SSH第三步&#xff1a;输入服务器地址与用户名第四步&#xff1a;设置会话名称第五步&#xff1a;点击 OK 并输入密码 3.密码管理4.小结参考文献 1.简介 MobaXterm 是一个功能强大的终…

智能座舱的下一个价值“爆点”——让“光”更智能

汽车智能化快速升级&#xff0c;智能座舱作为人机交互的主要窗口&#xff0c;交互模态、用户体验也呈现多维度升级。 例如&#xff0c;今年下半年上市的多款高端智能车型纷纷基于高性能座舱硬件平台&#xff0c;集成了AR-HUD、DMS/OMS等高阶功能&#xff0c;同时结合超大屏/多…

Transformer 的双向编码器表示 (BERT)

一、说明 本文介绍语言句法中&#xff0c;最可能的单词填空在self-attention的表现形式&#xff0c;以及内部原理的介绍。 二、关于本文概述 在我之前的博客中&#xff0c;我们研究了关于生成式预训练 Transformer 的完整概述&#xff0c;关于生成式预训练 Transformer (GPT) 的…

VMware ESXI 8 安装ipmitool 调整戴尔服务器风扇转速

本文内容适合ESXI 8版本安装ipmitool &#xff0c;进行管理&#xff0c;已知的是8.0以上版本无法安装社区的vib.所以需要自己编译文件&#xff0c;7.0及之前的版本可以安装vib版本的ipmtools。 一、编译好的适用于esxi8的ipmitool下载 ipmitool下载 二、安装ipmitool 1、开…

基于spark的Hive2Pg数据同步组件

一、背景 Hive中的数据需要同步到pg供在线使用&#xff0c;通常sqoop具有数据同步的功能&#xff0c;但是sqoop具有一定的问题&#xff0c;比如对数据的切分碰到数据字段存在异常的情况下&#xff0c;数据字段的空值率高、数据字段重复太多&#xff0c;影响sqoop的分区策略&…

软件工程:数据流图相关知识和多实例分析

目录 一、数据流图相关知识 1. 基本介绍 2. 常用符号 3. 附加符号 二、数据流图实例分析 1. 活期存取款业务处理系统 2. 工资计算系统 3. 商业自动化系统 4. 学校人事管理系统 5. 教材征订系统 6. 高考录取统分子系统 7. 订货系统 8. 培训中心管理系统 9. 考务处…

​已解决java.lang.ArrayIndexOutOfBoundsException异常的正确解决方法,亲测有效!!!​

已解决java.lang.ArrayIndexOutOfBoundsException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 报错问题 解决思路 解决方法 总结 Q1 - 报错问题 java.long.ArrayIndexOutOfBoundsException 是Java中的一个运行时异常​&#xff0c…

强化学习5——动态规划初探

动态规划具体指的是在某些复杂问题中&#xff0c;将问题转化为若干个子问题&#xff0c;并在求解每个子问题的过程中保存已经求解的结果&#xff0c;以便后续使用。实际上动态规划更像是一种通用的思路&#xff0c;而不是具体某个算法。 在强化学习中&#xff0c;被用于求解值函…

【网络工程师】交换机的配置

一、交换机5大基本工作模式 配置网络设备&#xff0c;需要使用console线&#xff0c;在PC上需要使用软件 “超级终端” 1、用户模式&#xff1a;switch> 可以查看交换机的额基本简单信息&#xff0c;且不能做任何修改配置&#xff01; 2、特权模式&#xff1a;switch## …

在使用Composer管理的项目中安装和使用

在使用Composer管理的项目中安装 如果项目框架本身就是使用Composer来管理包的话&#xff0c;直接在项目根目录执行Composer安装命令后&#xff0c;即可在项目控制器中调用QueryList来使用&#xff0c;这种框架有&#xff1a; Laravel、ThinkPHP5等。 在项目根目录执行compo…

SQL日期列更新操作详解

在实际的数据库管理过程中&#xff0c;有时我们需要对数据库中的日期列进行更新。这篇博客将详细介绍一条 SQL 语句&#xff0c;该语句用于更新 referral_up_order 表中的多个日期列&#xff0c;并将它们的日期部分更改为 2023-10-24&#xff0c;同时保留原始时间部分。 1、背…

LeGO-LOAM 几个特有函数的分析(2)

接上回LeGO-LOAM 几个特有函数的分析&#xff08;1&#xff09; 二、广度优先遍历 广度优先遍历&#xff08;Breadth-First Search, BFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法从树的根&#xff08;或图的某一指定节点&#xff09;开始&#xff0c;然后探索…

Linux 常见服务配置

笔记所以内容很多&#xff0c;建议选择性看看 SSH 对应服务 sshd 注意&#xff1a;配置文件 配制文件修改需要重启或重载sshd服务才能生效 systemctl sshd reload # 重载 sshd 配置文件 systemctl sshd restart # 重启 sshd 服务客户端配置文件 man ssh_config 可以…

数据库高可用mha

MHA搭建的步骤 一.配置主从复制 1.初始化环境 #在四台服务器上初始化环境 systemctl stop firewalld systemctl disable firewalld setenforce 0 2.修改 Master、Slave1、Slave2 节点的主机名 #在Master上 hostnamectl set-hostname mysql1 su#在Slave1 hostnamectl set-h…

泛型-限定存储数据类型

泛型 泛型的本质&#xff1a;参数类型化 概述&#xff1a;将类型由原来的具体的类型参数化&#xff0c;然后在 使用/调用 时传入具体的类型 格式&#xff1a; <类型> 指定一种类型的格式&#xff0c;这里的类型可以看成是 方法中的形参&#xff08;如果不理解可去看下形…

Flink窗口与WaterMark

本文目录 窗口的生命周期Window Assigners窗口函数&#xff08;Window Functions&#xff09;TriggersEvictorsAllowed Lateness 窗口 窗口&#xff08;Window&#xff09;是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中&#xff0c;再对每个“桶”加以处理。…

域名流量被劫持怎么办?如何避免域名流量劫持?

随着互联网不断发展&#xff0c;流量成为线上世界的巨大财富。然而一种叫做域名流量劫持的网络攻击&#xff0c;将会在不经授权的情况下控制或重定向一个域名的DNS记录&#xff0c;导致用户在访问一个网站时&#xff0c;被引导到另一个不相关的网站&#xff0c;从而劫持走原网站…

企微私域流量引流:从策略到实践的全面解析

随着互联网的发展&#xff0c;流量变得越来越贵&#xff0c;如何将流量转化为企业的价值成为了重要的议题。在这个背景下&#xff0c;企微私域流量成为了企业关注的焦点。本文将从策略和实践两个角度&#xff0c;全面解析企微私域流量的引流方法。 一、策略篇 1. 明确目标&…

maven pom.xml 加载本地.jar库文件方法

一般我们使用的jar包,都是从maven仓库中加载的, 那如果是从本地该如何加载呢? 本文介绍maven加载本地jar的方法 在 pom.xml 的 dependencies 节点内增加以下配置即可 <dependency> <groupId>cn.tekin</groupId> <artifactId>mylib</artifactI…

leetcode:908. 最小差值 I

一、题目 二、函数原型 int smallestRangeI(int* nums, int numsSize, int k) 三、思路 本题题目有些绕口&#xff0c;但是无伤大雅。本质就是可以对数组中的每个元素进行加/减 k 的操作&#xff0c;然后求数组中的最大、最小元素的最小差值。 分为几种情况&#xff1a; …