Java基础-正则表达式

news2024/11/16 11:46:13

文章目录

    • 1.基本介绍
    • 2.正则底层实现
        • 1.matcher.find()完成的任务
        • 2.matcher.group(0)分析
          • 1.源代码
          • 2.解释(不分组)
          • 3.解释(分组)
        • 3.总结
    • 3.正则表达式语法
        • 1.基本介绍
        • 2.元字符的转义符号
          • 1.基本介绍
          • 2.代码实例
        • 3.字符匹配符
          • 1.基本介绍
          • 2.字符匹配案例一
          • 3.字符匹配案例二
        • 4.选择匹配符
          • 1.基本介绍
          • 2.代码实例
        • 5.正则限定符
          • 1.基本介绍
          • 2.代码实例
        • 6.正则定位符
          • 1.基本介绍
          • 2.代码实例
        • 7.捕获分组
          • 1.基本介绍
          • 2.代码实例
        • 8.非捕获分组
          • 1.基本介绍
          • 2.代码实例
        • 9.非贪婪匹配
          • 代码实例
    • 4.正则应用实例
        • 1.题目
          • 代码
        • 2.验证复杂URL
        • 3.注意事项
    • 5.正则表达式三个常用类
        • 1.Pattern类
          • 整体匹配
          • 代码实例
        • 2.Matcher类
          • 代码实例
    • 6.反向引用
        • 1.基本介绍
        • 2.反向引用案例
          • 案例一
          • 代码实例
          • 案例二——结巴去重
          • 代码实例
    • 7.String类型使用正则表达式替换
        • 题目一(replaceAll)
        • 题目二(matches)
        • 题目三(split)
          • 按照#、-、~或者数字来分割
    • 8.本章练习
        • 练习一
        • 练习二
        • 练习三
    • 9.正则表达式大全

1.基本介绍

image-20240120185017604

2.正则底层实现

1.matcher.find()完成的任务
  1. 根据特定的规则,找到满足要求的字符串
  2. 找到后将索引放到mather对象的属性int[] groups;
  3. 字符串的第一个字符的索引放到groups[0],最后一个字符的索引加一放到groups[1]
2.matcher.group(0)分析
1.源代码

image-20240120192748099

2.解释(不分组)
  1. 前面的都是做的验证,直接看最后一句话
  2. 传进的参数是0,所以返回的是groups[0 * 2]groups[0 * 2 + 1]也就是截取索引为groups[0]groups[1]的内容并转换成String类型
  3. 总结一下,group[0]就是返回截取到的整个字符串
3.解释(分组)
  1. String regStr = "(\\d\\d)(\\d\\d)";
  2. 上面的这种情况就是分组的情况
  3. 此时groups数组记录的情况看下图image-20240120192259354
  4. 总结一下,在分组的情况下,group[x]对应groups[y]的下标
    1. x = 0 : y = 0, 1
    2. x = 1 : y = 2, 3
    3. x = 2 : y = 4, 5
    4. 以此类推
3.总结
  1. matcher.find()就是查找匹配到的字符串
  2. group(0)就是返回整个查找到的字符串,group(1)、(2)…就是返回第一组、第二组…匹配的字符串

3.正则表达式语法

1.基本介绍

image-20240120195118911

2.元字符的转义符号
1.基本介绍

image-20240120195649048

image-20240120200757289

2.代码实例
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp02 {
    public static void main(String[] args) {
        //内容
        String content = "abc$(abc(123(";
        //要匹配的样式
        String regStr = "\\("; //转义符\\
        //1.传入匹配的样式,创建模式对象
        Pattern compile = Pattern.compile(regStr);
        //2.传入要匹配的内容,创建匹配器对象
        Matcher matcher = compile.matcher(content);
        //3.开始匹配
        while (matcher.find()) {
            System.out.println("匹配到:" + matcher.group(0));
        }
    }
}

3.字符匹配符
1.基本介绍

image-20240120201158697

image-20240120201242068

2.字符匹配案例一

image-20240121091506517

package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp03 {
    public static void main(String[] args) {
        String content = "a11c8aBC";
//        String regStr = "[a-z]"; //a到z
//        String regStr = "[A-Z]"; //A到Z
//        String regStr = "(?i)abc"; //匹配abc字符串不区分大小写
//        String regStr = "a((?i)bc)"; //匹配bc不区分大小写
//                String regStr = "abc";
        String regStr = "[^a-z]{2}"; //匹配非a到z的两个字符
        
        Pattern compile = Pattern.compile(regStr); //模式对象
//        Pattern compile = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE); //匹配时不区分大小写
        Matcher matcher = compile.matcher(content);
        while (matcher.find()) {
            System.out.println("找到:" + matcher.group(0));
        }
    }
}

3.字符匹配案例二

image-20240121091538807

package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp04 {
    public static void main(String[] args) {
        String content = "asdg";
        String regStr = "[abcd]"; //abcd任意一个字符
        String regStr1 = "[^abcd]"; //除了abcd
        String regStr2  = "[\\d]"; //任意数字
        String regStr3 = "[\\D]"; //任意非数字
        String regStr4 = "[\\w]"; //任意数字字母,下划线
        String regStr5 = "[\\W]"; //非数字字母,下划线
        String regStr6 = "[\\s]"; //匹配任意空白字符,空格制表符等
        String regStr7 = "[\\S]"; //匹配任意非空白字符
        String regStr8 = "[.]"; //匹配除了\n以外的任何字符,如果要匹配.则需要加\\

        //模式对象
        Pattern compile = Pattern.compile(regStr);
        //匹配对象
        Matcher matcher = compile.matcher(content);
        //开始匹配
        while (matcher.find()) {
            System.out.println("匹配到:" + matcher.group(0));
        }
    }
}

4.选择匹配符
1.基本介绍

image-20240121092601766

2.代码实例
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp05 {
    public static void main(String[] args) {
        String content = "hanshunping 韩顺平";
        String regStr = "han|韩"; //匹配到han或韩
        Pattern compile = Pattern.compile(regStr);
        Matcher matcher = compile.matcher(content);
        while (matcher.find()) {
            System.out.println("匹配到:" + matcher.group(0));
        }
    }
}

5.正则限定符
1.基本介绍

image-20240121093136953

image-20240121093316964

2.代码实例
package regexp;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp06 {
    public static void main(String[] args) {
        String content = "aaaaaaa11111";
        String regStr = "a{3}"; //匹配三个a
        String regStr1 = "1{4}"; //匹配四个1
        String regStr2 = "(\\d){2}"; //匹配两个数字
        String regStr3 = "a{3, 4}"; //匹配三到四个a
        //java默认贪婪匹配,默认匹配多的
        String regStr4 = "1{4, 5}"; //匹配四到五个1
        String regStr5 = "\\d{2, 5}"; //匹配二到五个数字
        String regStr6 = "1+"; //匹配一个或多个1
        String regStr7 = "a*"; //匹配任意个a
        String regStr8 = "1?"; //匹配0个或一个1
    }
}

6.正则定位符
1.基本介绍

image-20240121094557124

2.代码实例
package regexp;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp07 {
    public static void main(String[] args) {
        String str1 = "^[0-9]+[a-z]*"; //至少一个数字开头,任意个小写字母结尾
        String str2 = "^[0-9]\\-[a-z]+$"; //以一个数字开头后接一个“-”以至少一个小写字母结尾
        String str3 = "han\\b"; //匹配han的后边界,即han后面没东西,或者是空格
        String str5 = "han\\B"; //匹配han的前边界,即han前面没东西,或者是空格
    }
}

7.捕获分组
1.基本介绍

image-20240121100556620

2.代码实例
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp08 {
    public static void main(String[] args) {
        String content = "hanshunping s7789 nn1189han";
        String regStr = "(\\d\\d)(\\d\\d)"; //非命名分组
        String regStr1 = "(?<g1>\\d\\d)(?<g2>\\d\\d)"; //非命名分组


        //模式对象
        Pattern compile = Pattern.compile(regStr1);
        //匹配对象
        Matcher matcher = compile.matcher(content);

        while (matcher.find()) {
//            System.out.println(matcher.group(1)); //分组一
//            System.out.println(matcher.group(2)); //分组二
            //命名分组,可以使用编号或者名字
            System.out.println(matcher.group("g1")); //分组一
            System.out.println(matcher.group("g2")); //分组二

        }
    }
}

8.非捕获分组
1.基本介绍

image-20240121101406993

2.代码实例
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 * 非捕获分组
 */
public class RegExp09 {
    public static void main(String[] args) {
        String content = "hello韩顺平教育 jack韩顺平老师 韩顺平同学hello";

//        String regStr = "韩顺平(?:教育|老师|同学)"; //匹配韩顺平教育韩顺平老师韩顺平同学
//        String regStr = "韩顺平(?=教育|老师|同学)"; //匹配韩顺平后面有教育|老师|同学的韩顺平,也就是三个
        String regStr = "韩顺平(?!教育|老师)"; //匹配韩顺平后面没有教育|老师的韩顺平,也就是只有一个
        Pattern compile = Pattern.compile(regStr);
        Matcher matcher = compile.matcher(content);

        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }
    }
}

9.非贪婪匹配
代码实例
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp10 {
    public static void main(String[] args) {
        String content = "hello111111";
        String regStr ="\\d+?";//在限定符后面加?表示非贪婪匹配,这里每次就匹配一个1

        Pattern compile = Pattern.compile(regStr);
        Matcher matcher = compile.matcher(content);
        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }

    }
}

4.正则应用实例

1.题目

image-20240121102950135

代码
package regexp;

import org.junit.jupiter.api.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExercise {
    //汉字
    public static void main(String[] args) {
        String content1 = "史蒂夫";
        String regStr1 = "^[\u3091-\uffe5]+$"; //匹配至少一个汉字,并规定了开头结尾为空

        Pattern compile = Pattern.compile(regStr1);
        Matcher matcher = compile.matcher(content1);

        if (matcher.find()) {
            System.out.println("匹配成功");
        }
        else {
            System.out.println("匹配失败");
        }
    }
    //邮政编码 1-9开头的一个六位数
    @Test
    public void find1() {
        String content1 = "123458";
        String regStr1 = "^[1-9]\\d{5}$"; //匹配1-9开头的一个六位数

        Pattern compile = Pattern.compile(regStr1);
        Matcher matcher = compile.matcher(content1);

        if (matcher.find()) {
            System.out.println("匹配成功");
        }
        else {
            System.out.println("匹配失败");
        }
    }
    //qq号码 1-9开头的一个(5位到10位数)
    @Test
    public void find2() {
        String content1 = "1721469477";
        String regStr1 = "^[1-9]\\d{4,9}$"; //匹配1-9开头的一个六位数

        Pattern compile = Pattern.compile(regStr1);
        Matcher matcher = compile.matcher(content1);

        if (matcher.find()) {
            System.out.println("匹配成功");
        }
        else {
            System.out.println("匹配失败");
        }
    }
    //手机号码 13,14,15,18开头的11位数
    @Test
    public void find3() {
        String content1 = "13604959178";
        String regStr1 = "^1(?:3|4|5|8)\\d{9}$"; //匹配1-9开头的一个六位数
        String regStr2 = "^1(3|4|5|8)\\d{9}$"; //匹配1-9开头的一个六位数


        Pattern compile = Pattern.compile(regStr2);
        Matcher matcher = compile.matcher(content1);

        if (matcher.find()) {
            System.out.println("匹配成功");
        }
        else {
            System.out.println("匹配失败");
        }
    }
}

2.验证复杂URL
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegUrl {
    public static void main(String[] args) {
//        String content = "https://www.bilibili.com/video/BV1fh411y7R8?p=894&vd_source=6ca8808c5ff14bd32a1acd1b4774a821";
        String content = "https://www.bilibili.com";
        String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&%.#]*)?$";
        //注意:在[.]指的是真的.

        Pattern compile = Pattern.compile(regStr);
        Matcher matcher = compile.matcher(content);

        if (matcher.find()) {
            System.out.println("匹配成功");
        }
        else {
            System.out.println("匹配失败");
        }
    }
}

3.注意事项

在使用常规方法验证的时候一定要加定位符^和$

5.正则表达式三个常用类

1.Pattern类
整体匹配

image-20240121134948084

代码实例
package regexp;

import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp11 {
    public static void main(String[] args) {
        //整体匹配,不需要添加定位符,直接匹配整体
        String content = "我是孙先生12321";
        String pattern = ".{5}\\d{5}";
        boolean matches = Pattern.matches(pattern, content);
        System.out.println(matches);
    }
}

2.Matcher类
代码实例
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp12 {
    public static void main(String[] args) {
        String content = "hello edu jack hello tom hspedu hspedu";
        String regStr = "hspedu";

        Pattern compile = Pattern.compile(regStr);
        Matcher matcher = compile.matcher(content);

        while (matcher.find()) {
            System.out.println("==================");
            //分别返回每次匹配到的起始索引和结束索引加一
            System.out.println(matcher.start());
            System.out.println(matcher.end());
        }
        //整体匹配方法
        System.out.println(matcher.matches());
        //把所有的hspedu替换成韩顺平教育,不是真的替换,因为String是不可变类型的,只能返回另一个String类型的对象
        String s = matcher.replaceAll("韩顺平教育");
        System.out.println(s);

    }
}

6.反向引用

1.基本介绍

image-20240121141412448

2.反向引用案例
案例一

image-20240121142003409

代码实例
package regexp;

import org.junit.jupiter.api.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp13 {
    public static void main(String[] args) {
        String content = "1221 jack 5225 jack33 yyy xxx";
        String regStr = "(\\d)(\\d)\\2\\1"; //每次匹配过后数字都会被记录下来,在后面就可以引用
        Pattern compile = Pattern.compile(regStr);
        Matcher matcher = compile.matcher(content);
        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }
    }
    //整体匹配检索编号 12321-333999111这样的号码
    @Test
    public void find1() {
        String content = "12321-333999111";
        String regStr = "\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}";
        //获取模式对象
        Pattern compile = Pattern.compile(regStr);
        //获取匹配器
        Matcher matcher = compile.matcher(content);
        //整体匹配
        System.out.println(matcher.matches());

    }

}

案例二——结巴去重

image-20240121143015380

代码实例
package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class RegExp14 {
    public static void main(String[] args) {
        String content = "我...我我要....学学学学。。。编程java";
        String regStr = "(.)\\1+"; //匹配所有重复的字符
        Pattern compile = Pattern.compile(regStr); //获取模式
        Matcher matcher = compile.matcher(content); //获取匹配器
        //在外部反向引用使用$,去重
        String s = matcher.replaceAll("$1");
        System.out.println(s);
    }
}

7.String类型使用正则表达式替换

题目一(replaceAll)

image-20240121145023750

    public static void main(String[] args) {
        String content = "2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,几周后其获得了Apple公司Mac OS X的工业标准的支持。2001年9月24日,J2EE1.3发布。2002年2月26日,J2SE1.4发布。自此Java的计算能力有了大幅提升,与J2SE1.3相比,其多了近62%的类和接口。在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),代号为“Tiger”,Tiger包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。";
        //使用正则表达式将jdk1.3和1.4替换成jdk
        String s = content.replaceAll("JDK1\\.3|JDK1\\.4", "JDK");
        System.out.println(s);
    }
题目二(matches)

image-20240121145835354

    public static void main(String[] args) {
        //验证这个手机号是否是138,139开头的
        String content = "13888889999";
        boolean matches = content.matches("^(138|139)\\d{8}");
        System.out.println(matches);
    }
题目三(split)
按照#、-、~或者数字来分割
package regexp;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class Regexp15 {
    public static void main(String[] args) {
        String content = "hello#abc-jack12smith~北京";
        //按照指定符号分割
        String[] split = content.split("[#\\-~]");
        for (String s : split) {
            System.out.println(s);
        }
    }
}

8.本章练习

练习一

image-20240121150850628

package regexp;

import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class HomeWork01 {
    public static void main(String[] args) {
        String content = "1-721469477@qq.com";
        String regStr = "[\\w-]+@([a-zA-Z]+\\.)+[a-zA-Z]+";
        //整体匹配
        boolean matches = Pattern.matches(regStr, content);
        System.out.println(matches);
    }
}

练习二

image-20240121152315100

package regexp;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class HomeWork02 {
    public static void main(String[] args) {
        String content1 = "1223";
        String content2 = "-1223";
        String content3 = "12.23";
        String content4 = "+1223";
        String content5 = "0.89";

        //匹配整数或小数
        String regStr = "[-+]?([1-9]\\d*|0)(\\.\\d+)?";

        boolean matches = content5.matches(regStr);
        System.out.println(matches);

    }
}

练习三

image-20240121155901112

package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class HomeWorrk03 {
    public static void main(String[] args) {
        String url = "http://www.sohu.com:8080/abc/dfs/df/index.htm";
        //分组解析
        String regStr = "^([a-zA-Z]+)://([a-zA-Z.]+):(\\d+)[/\\w-]*/([a-zA-Z.]+)$";
        Pattern compile = Pattern.compile(regStr);
        Matcher matcher = compile.matcher(url);

        if (matcher.matches()) {
            System.out.println("协议:" + matcher.group(1));
            System.out.println("域名:" + matcher.group(2));
            System.out.println("端口:" + matcher.group(3));
            System.out.println("文件:" + matcher.group(4));
        }
        else {
            System.out.println("匹配失败");
        }
    }
}

9.正则表达式大全

java正则表达式大全(参考).zip

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

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

相关文章

洛谷day3

B2053 求一元二次方程 - 洛谷 掌握printf用法&#xff1b; #include <iostream> #include <cmath> using namespace std; double a,b,c; double delta; double x1,x2;int main() {cin>>a>>b>>c;delta b*b-4*a*c;if(delta>0){x1 (-bsqrt…

【前端寻宝之路】JavaScript初学之旅

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-azUa9yH16cRXQUxE {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

生产力工具|安装更新R软件(R、studio)

内容介绍&#xff1a; 安装R软件&#xff1a; 下载 R X64 3.5.1: 访问官方R网站 https://cran.r-project.org/。选择适合Windows版本的安装包。将安装包下载到您的计算机。 本地安装: 运行下载的“R-3.5.1-win.exe”文件。按照安装向导&#xff0c;选择安装路径&#xff0c;取消…

机器视觉定位点胶机系统工作原理分析

机器视觉&#xff0c;简而言之&#xff0c;即是通过机器来模拟人眼的视觉功能&#xff0c;执行测量与判断的任务。这一过程中&#xff0c;关键的角色是机器视觉产品&#xff0c;它们通常以CMOS或CCD的形式出现&#xff0c;负责将观察的目标转化为图像信号。这些信号随后被专用的…

Pinctrl子系统_05_Pincontroller构造过程情景分析

上一节我们了解了Pinctrl子系统主要的数据结构&#xff0c;要想更好的掌握Pinctrl子系统&#xff0c;还需要知道他的构造过程。 本节我们就来分析一下Pinctrl子系统的构造过程。 以内核面向对象的思想&#xff0c;设备树可以分为两部分&#xff0c;左边是Pinctrl子系统节点&a…

nodejs+vue高校师资管理系统python-flask-django-php

快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;然后线上管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方便的生活方式…

002- 用 AutoCoder 添加和修改代码

实际上 AutoCoder 最适合的场景是修改代码&#xff0c;因为它最原始的功能是把源码你指定的文档搜索引擎搜集到的资料和你的需求生成一个prompt给到大模型。 此外纠正大家一个观点&#xff0c; AutoCoder 不是一句话给你创建一个网站抑或一个大型的项目。我们是帮助研发或者产品…

移植 Zephyr 到 Art-Pi

背景 ​ 最近工作中接触到了 Zephyr&#xff0c;不由觉得 Zephyr 是个很强大、全面、优秀的实时操作系统&#xff0c;但同时是有一定的上手难度的&#xff0c;其复杂的构建系统让小编倒吸一口凉气。为了深入研究并完全掌控 Zephyr&#xff0c;小编决定把它移植到手头的开发板上…

Java八股文(SpringCloud)

Java八股文のSpringCloud SpringCloud SpringCloud 什么是Spring Cloud&#xff1f; Spring Cloud是一个用于构建分布式系统的开发工具箱&#xff0c;它基于Spring Boot框架&#xff0c;提供了一系列的组件和工具&#xff0c;用于帮助开发者快速搭建和管理分布式系统中的各种常…

Spring相关框架八股

单例bean是线程安全的吗&#xff1f; AOP 事务失效 Bean生命周期 Bean循环依赖解决 MVC执行流程 自动装配原理 Spring常见注解 SpringMVC注解 SpringBoot注解 MyBatis执行流程 MyBatis延迟加载 MyBatis缓存 SpringCloud五大组件 注册中心Nacos、Eureka 负载均衡Ribbon 服务雪崩…

Android 你遇到的无障碍onGesture不执行

你是不是和我一样&#xff0c;在开发无障碍应用的时候&#xff0c;翻边了Android的AccessibilityService源码 但是就是发现不了onGesture不执行的原因&#xff1f; 你是不是和我一样&#xff0c;在好多测试手机之间徘徊&#xff0c;发现还是不执行&#xff1f; 你是不是和我一…

2024内蒙古等保备案办理流程指引

网络安全已成为国家、企业和个人共同关注的焦点。所以积极办理等保备案是非常重要的。本文将详细介绍办理内蒙古企业办理等保备案的流程&#xff0c;帮助读者了解并顺利完成相关手续。仅供参考哦&#xff01; 2024内蒙古等保备案办理流程指引 办理时间&#xff1a;周一到周五工…

PostgreSQL11 | Windows系统安装PostgreSQL

本教程选取与参考书籍《PostgreSql11 从入门到精通》&#xff08;清华大学出版社&#xff09;的11大版本最新小版本11.22的安装作为教程案例 下载 下载PostgreSQL installer 下载到本地 安装 运行安装引导器 中国地区语言选项&#xff08;暂时&#xff09; Chinese(Simplifie…

OpenHarmony IDL工具规格及使用说明书(仅对系统应用开放)

IDL接口描述语言简介 当客户端和服务器进行IPC通信时&#xff0c;需要定义双方都认可的接口&#xff0c;以保障双方可以成功通信&#xff0c;OpenHarmony IDL&#xff08;OpenHarmony Interface Definition Language&#xff09;则是一种定义此类接口的工具。OpenHarmony IDL先…

io流的学习4

字符缓冲流 原理&#xff1a;底层自带了长度为8192的缓冲区提高性能。 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class BufferedStringdemo01 {public static void main(String…

【旅游景点项目日记 | 第二篇】基于Selenium爬取携程网景点详细数据

文章目录 3.基于Selenium爬取携程网景点详细数据3.1前提环境3.2思路3.3代码详讲3.3.1查询指定城市的所有景点3.3.2获取详细景点的访问路径3.3.3获取景点的详细信息 3.4数据库设计3.5全部代码3.6效果图 3.基于Selenium爬取携程网景点详细数据 3.1前提环境 确保安装python3.x环…

HCIP的学习(4)

GRE和MGRE VPN---虚拟专用网络。指依靠ISP或其他公有网络基础设施上构建的专用的安全数据通信网络。该网络是属于逻辑上的。​ 核心机制—隧道机制&#xff08;封装技术&#xff09; GRE—通用路由封装 ​ 三层隧道技术&#xff0c;并且是属于点到点的隧道。 [r1]interface T…

1+x中级题目练习复盘(九)

注解和注释是两种完全不同的语法&#xff0c;注解可以为程序增加额外的功能&#xff0c;或为程序添加元数据。 函数式接口是指有且只有一个抽象方法的接口&#xff1b; 函数式接口可以使用 FunctionalInterface 进行标注&#xff0c;但不是必须的。除了 “java.util.function…

zabbix安装及使用(错误及解决方案)

安装zabbix 常见错误&#xff1a; Zabbix下载错误 6.0与5.0版本冲突 解决方法 yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-get --skip-broken zabbix6.0-web 自己有数据库&#xff0c;使用以下命令 pid找不到 /var/log/zabbix/zabbix_server.log 错误&a…

[AutoSar]BSW_Com020 Handle_ID,Global_PDU,Local_PDU的联系

目录 关键词平台说明一、概念二、API的使用和形参三、Handle ID 唯一性特例四、PDU和handle ID关联用例 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c; EB芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (…