【进阶篇-Day6:JAVA中Arrays工具类、排序算法、正则表达式的介绍】

news2024/11/25 18:46:12

目录

  • 1、Arrays工具类
  • 2、排序算法
    • 2.1 冒泡排序
    • 2.2 选择排序
    • 2.3 二分查找(折半查找)
      • (1)概念:
      • (2)步骤:
  • 3、正则表达式
    • 3.1 正则表达式的概念:
    • 3.2 正则表达式的格式:
      • (1)单个字符类:
      • (2)预定义字符类:
      • (3)数量:
    • 3.3 练习:
    • 3.4 String类中与正则有关的常见方法:

1、Arrays工具类

在这里插入图片描述

package it.heima;
import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr1 = {11,22, 33,44, 55};
        int[] arr2 = {11,22, 33,44, 55};
        //1、Arrays.toString():将数组元素拼接为带有格式的字符串
        System.out.println(Arrays.toString(arr1));//[11, 22, 33, 44, 55]

        //2、Arrays.equals(arr1, arr2):比较两个数组内容是否相等
        System.out.println(arr1 == arr2);//false
        System.out.println(Arrays.equals(arr1, arr2));//true

        //3、查找元素在数组中的索引(二分查找发:必须是排好序的数组)
        System.out.println(Arrays.binarySearch(arr1, 44));//3
        System.out.println(Arrays.binarySearch(arr1, 66));//-6 查找的元素不存在返回 -(插入点) - 1

        //4、对数组进行默认的升序排序。如果降序需要指定比较器,后续介绍 todo
        int[] arr3 = {11,77, 33,88, 55};
        int[] arr4 = {11,77, 33,88, 55};
        Arrays.sort(arr3);
        System.out.println(Arrays.toString(arr3));
    }
}

2、排序算法

2.1 冒泡排序

在这里插入图片描述

package it.heima;
import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {6, 3, 9, 2, 8, 4};
        //外循环:比较轮次
        for (int i = 0; i < arr.length - 1; i++) {
            //内循环:比较次数
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] < arr[j + 1]){//从大到小:将最小的冒泡到最上面
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

2.2 选择排序

在这里插入图片描述

package it.heima;
import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {6, 3, 9, 2, 8, 4};
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]){ //从小到大排序
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));//[2, 3, 4, 6, 8, 9]
    }
}

2.3 二分查找(折半查找)

(1)概念:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(2)步骤:

第一步:
在这里插入图片描述
第二步:

在这里插入图片描述
第三步:

在这里插入图片描述

总结:
在这里插入图片描述

案例:

package it.heima;

public class BinarySearch {
    public static void main(String[] args) {
        int num = 33;
        int[] arr = {11,22,33,44,55,66,77,88,99,100};
        int left = 0;
        int right = arr.length - 1;
        int mid = -1;
        while (left <= right){
            mid = (left + right) / 2;
            if (arr[mid] < num){//说明在右边
                left = mid + 1;
            }else if (arr[mid] > num){//说明在左边
                right = mid - 1;
            }else {
                break;
            }
        }
        if (mid != -1){
            System.out.println("找到了,所在位置为:" + mid);
        }
    }
}

3、正则表达式

3.1 正则表达式的概念:

在这里插入图片描述

3.2 正则表达式的格式:

在这里插入图片描述

(1)单个字符类:

就是这个位置的字符的取值范围,直接看代码理解:

package it.heima.regex;

public class RegexDemo {
    public static void main(String[] args) {
        /**
         * 注:
         * []:代表单个字符的取值,例如[a]表示这个位置的字符只能是a,[ab]表示这个位置的字符只能为a或b
         * ^:代表取反,例如[^a]表示这个位置可以为除了字符a其他任意一个字符,[^ab]表示这个位置可以为除了字符a和b的其他任意一个字符
         * -:代表范围,例如[a-z]表示这个位置可以为a到z的任意一个字符,[0-9]表示这个位置可以为0到9的任意一个字符
         */
        //(1):[abc]————————》只能是abc中的一个
        String s1 = "[abc]";
        System.out.println("b".matches(s1));//true
        System.out.println("ab".matches(s1));//false

        //(2):[^abc]————————》除了abc外的任意一个
        String s2 = "[^abc]";
        System.out.println("b".matches(s2));//false
        System.out.println("x".matches(s2));//true

        //(3):[a-zA-Z]————————》a到z,A到Z,包括(范围)
        String s3 = "[a-zA-Z]";
        System.out.println("0".matches(s3));//false
        System.out.println("x".matches(s3));//true

        //(4):[a-d[m-p]]————————》a到z,m-p,可以写成[a-dm-p]
        String s4 = "[a-d[m-p]]";
        System.out.println("e".matches(s4));//false
        System.out.println("n".matches(s4));//true

        //(5):[a-z&&[def]]————————》a到z中,只有def可以选择,可以写成[def]
        String s5 = "[a-z&&[def]]";
        System.out.println("e".matches(s5));//true
        System.out.println("a".matches(s5));//false

        //(6):[a-z&&[^bc]]————————》a到z中,除了bc,其他都可以,可以写成[ad-z]
        String s6 = "[a-z&&[^bc]]";
        System.out.println("g".matches(s6));//true
        System.out.println("c".matches(s6));//false

        //(7):[a-z&&[^m-p]]————————》a到z中,除了m-p,其他都可以,可以写成[a-lq-z]
        String s7 = "[a-z&&[^m-p]]";
        System.out.println("e".matches(s7));//true
        System.out.println("n".matches(s7));//false
    }
}

(2)预定义字符类:

就是把单个字符的一些常用写法,用别的方式代替了。直接看代码理解:

package it.heima.regex;

public class RegexDemo2 {
    public static void main(String[] args) {
        /**
         * 预定义字符类:
         *
         * .: 代表任意一个字符
         * \d:代表一个数字,和[0-9]一个作用
         * \: 代表转义字符,就是把当前字符的含义,转义成另一种含义,例如"\t",表示将当前的t转换成tab健
         * \D:代表非数字,和[^0-9]一个作用
         * \s:代表一个空白字符
         * \S:代表一个非空白字符
         * \w:代表英文、数字、下划线,等于[a-zA-Z_0-9]
         * \W:代表一个非单词字符,等于[^\w]
         *
         */

        //(1):.————————》代表任意一个字符
        String s1 = ".";
        System.out.println("a".matches(s1));//true
        System.out.println("*".matches(s1));//true

        //(2):/d————————》代表一个数字,和[0-9]一个作用
        String s2 = "\\d";//注意:\为转义字符,这里第一个\转义第二个\为字符\
        System.out.println("a".matches(s2));//false
        System.out.println("4".matches(s2));//true

        //(3):\D————————》代表非数字,和[^0-9]一个作用
        String s3 = "\\D";
        System.out.println("a".matches(s3));//true
        System.out.println("4".matches(s3));//false

        //(4):\s————————》代表一个空白字符
        String s4 = "\\s";
        System.out.println(" ".matches(s4));//true
        System.out.println("4".matches(s4));//false

        //(5):\S————————》代表一个非空白字符
        String s5 = "\\S";
        System.out.println(" ".matches(s5));//false
        System.out.println("4".matches(s5));//true

        //(6):\w————————》代表英文、数字、下划线,等于[a-zA-Z_0-9]
        String s6 = "\\w";
        System.out.println("F".matches(s6));//true
        System.out.println("*".matches(s6));//false

        //(7):\W————————》代表一个非单词字符,等于[^\w]
        String s7 = "\\W";
        System.out.println("F".matches(s7));//false
        System.out.println("*".matches(s7));//true
    }
}

(3)数量:

就是指定出现的次数。

package it.heima.regex;

public class RegexDemo3 {
    public static void main(String[] args) {
        /**
         * 数量:
         * ?:代表0次或1次,例如 a?就表示a可以为0次或1次
         * *:代表0次或多次,例如 a*就表示a可以为0次或多次(任意次数)
         * +:代表1次或多次,例如 a*就表示a可以为1次或多次
         * {n}:代表正好n次,例如 a{3}表示a正好3次
         * {n,}:代表至少n次,例如 a{3,}表示a至少3次
         * {n,m}:代表至少n次,但不超过m次,例如 a{3,6}表示a至少3次但不超过6次
         *
         */

        //(1):?————————》代表0次或1次
        String s1 = "2?";
        System.out.println("223".matches(s1));//false
        System.out.println("".matches(s1));//true

        //(2):?————————》代表0次或多次(任意次数)
        String s2 = "2*";
        System.out.println("222222".matches(s2));//true
        System.out.println("".matches(s2));//true

        //(3):+————————》代表1次或多次
        String s3 = "2+";
        System.out.println("222222".matches(s3));//true
        System.out.println("2".matches(s3));//true
        System.out.println("".matches(s3));//false

        //(4):{n}————————》代表正好n次
        String s4 = "2{3}";
        System.out.println("222222".matches(s4));//false
        System.out.println("222".matches(s4));//true

        //(5):{n,}————————》代表至少n次
        String s5 = "2{3,}";
        System.out.println("222222".matches(s5));//true
        System.out.println("22".matches(s5));//false

        //(5):{n,m}————————》代表至少n次,但不超过m次
        String s6 = "2{3,6}";
        System.out.println("22222".matches(s6));//true
        System.out.println("22".matches(s6));//false
        System.out.println("22222222".matches(s6));//false
    }
}

3.3 练习:

在这里插入图片描述

package it.heima.regex;

public class Test {
    public static void main(String[] args) {
        String qqRegex = "[1-9]\\d{4,11}";
        System.out.println("1917609089".matches(regex));//true
        System.out.println("0917609089".matches(regex));//false
        System.out.println("1917609089000".matches(regex));//false
    }
}

在这里插入图片描述

package it.heima.regex;

public class Test {
    public static void main(String[] args) {
        String telRegex = "1[3-9]\\d{9}";
        System.out.println("16769342819".matches(telRegex));//true
        System.out.println("56769342819".matches(telRegex));//false
        System.out.println("11769342819".matches(telRegex));//false
        System.out.println("167693428190".matches(telRegex));//false
    }
}

在这里插入图片描述

package it.heima.regex;

public class Test {
    public static void main(String[] args) {
        String emailRegex = "\\w+[@][\\w&&[^_]]+(\\.[a-z]{2,3})+";
        System.out.println("zhangsan@163.com".matches(emailRegex));//true
        System.out.println("16769342819@3232qq.com".matches(emailRegex));//true
        System.out.println("16769342819".matches(emailRegex));//false
    }
}

3.4 String类中与正则有关的常见方法:

在这里插入图片描述

package it.heima.regex;

public class Test2 {
    public static void main(String[] args) {
        String s = "先帝1创业2未半而中道3崩殂4,今5天下三分6,益州疲弊7,此8诚危急存亡之秋也。然9侍卫之臣不懈于内,忠志之士忘身10于外者,盖追先帝之殊遇11,欲报之于陛下也。诚宜12开张圣听13,以光14先帝遗德,恢弘15志士之气,不宜妄自菲薄16,引喻失义17,以塞忠谏之路也18。\n" +
                "宫中府中,俱为一体19;陟罚臧否20,不宜异同:若有作奸犯科21及为忠善者22,宜付有司23论其刑赏24,以昭陛下平明之理25;不宜偏私26,使内外异法也27。\n" +
                "侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯28,是以先帝简拔以遗陛下29:愚以为宫中之事,事无大小,悉以咨之30,然后施行,必能裨补阙漏31,有所广益32。\n" +
                "将军向宠,性行淑均33,晓畅34军事,试用35于昔日,先帝称之曰“能”,是以众议举宠为督36:愚以为营37中之事,悉以咨之,必能使行阵38和睦,优劣得所39。";

        s = s.replaceAll("[0-9]", " ");//将s中的数字用空格替换
        System.out.println(s);
    }
}

在这里插入图片描述

  • 代码:
package it.heima.regex;

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

public class Test3 {
    public static void main(String[] args) {
        String data = "来小马课堂学习Java,电话:18666668888,18699998888或者联系" +
                "邮箱1:boniu@itcast.cn 邮箱2:bozai@itcast.cn 邮箱3:dlei0009@163.com" +
                "座机电话:01036517895,010-98951256" +
                "热线电话:400-618-9090,400-618-4000,4006184000,4006189090";

        //1、定义爬取正则
        String regex = "1[3-9]\\d{9}|\\w+@[\\w&&[^_]]+(\\.[a-z]{2,3})+|0\\d{2,3}-?\\d{7,8}|400-?\\d{3}-?\\d{4}";

        //2、将正则表达式封装为 Pattern 对象
        Pattern pattern = Pattern.compile(regex);

        //3、获取匹配器对象
        Matcher matcher = pattern.matcher(data);

        //4、通过匹配器,从内容中爬取信息
        while (matcher.find()){
            System.out.println(matcher.group());
        }
    }
}
  • 输出:
18666668888
18699998888
boniu@itcast.cn
bozai@itcast.cn
dlei0009@163.com
01036517895
010-98951256
400-618-9090
400-618-4000
4006184000
4006189090

Process finished with exit code 0

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

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

相关文章

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时&#xff0c;经常会遇到不能自动创建离散端口的问题&#xff0c;原因有很多&#xff0c;比如&#xff1a;缺少元器件封装、开路端口、多端子模型等等&#xff0c;这个时候&#xff0c;很多人会选择手动进行端口创建&#xff0c;但是&a…

【C语言】--操作符详解

&#x1f32d;个人主页: 起名字真南 &#x1f37f;个人专栏:【数据结构初阶】 【C语言】 目录 1 算术操作符1.1 和 -1.2 *1.3 /1.4 % 2 赋值操作符 &#xff1a;2.1 复合赋值符 3 单目操作符3.1 和- - 4 强制类型转换5 printf 和 scanf5.1 printf5.1.1 基本用法5.1.2 占位符5.…

Processing入门教程

目录&#xff1a; 课程前言认识PROCESSING 关于像素图形代码色彩与填充练习交互关于setup()和draw()第一次进行移动进一步复杂的交互操作代码实现如下&#xff1a;进一步了解PROCESSING 变量使用变量系统内置变量条件语句逻辑运算符循环语句while循环for循环结构化 函数实参对…

信息系统项目管理师(项目整合管理)补充

项目管理信息系统&#xff1a;给项目提供了IT软件工具&#xff0c;例如进度计划软件工具、工作授权系统、配置管理系统、信息收集与发布系统&#xff0c;或其他基于IT技术的工具。以及进入其他在线信息系统&#xff08;如知识库&#xff09;的登录界面&#xff0c;支持自动收集…

如何解决跨国视频会议卡顿问题

在全球化日益加深的今天&#xff0c;跨国视频会议已成为企业沟通协作的重要工具。然而&#xff0c;许多企业在使用跨国视频会议时&#xff0c;经常会遇到卡顿和延迟问题。这不仅影响会议的顺利进行&#xff0c;还可能对企业的业务决策和项目进度造成不良影响。本文将探讨跨国视…

如何正确使用C#短信接口发送招生短信

群发短信对教育机构来讲虽然是个不错的招生工具,但怎么使用决定着生源转化效率,如果是为了单纯的发短信而发短信效率当然不好,那么如何正确使用招生群发短信呢?技巧才是关键! 教育短信发送较多的就是招生群发短信内容,而运营商对教育行业内容审核一般比较严格,需要短信公司特殊…

前端通过ResizeObserver来监听dom大小动态渲染echarts

export const GlobalResizeObserver (function () {const ATTR_NAME global-resizeobserver-keyconst attrValueToCallback {}function antiShake(fn, delay, immediate false) {let timer null//不能用箭头函数return function () {//在时间内重复调用的时候需要清空之前…

独立开发者系列(12)——下单与支付

做业务有个绕不开的业务逻辑&#xff0c;就是支付。这里总结一个基础的支付电商逻辑闭环流程&#xff0c;完成支付基础体系的实现。这里假定我们要实现的是一个独立的电商平台上允许用户在平台充值&#xff0c;其他的类似多多购物或者淘宝购物的流程逻辑。 数据表结构的逻辑设…

ElementUI搭建使用过程

1.ElementUI概述 Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库&#xff0c;相当于是css的框架 2.安装ElementUI 第一步&#xff1a;创建一个vue-cil项目 &#xff01;&#xff01;&#xff01;&#xff08;上篇文章已详细讲述搭建过…

线性代数知识点搜刮

求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等&#xff0c;取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行&#xff08;…

智能工业网络,需要何种工业以太网交换机作为支撑?

随着工业企业数字化及信息化的进一步深化升级&#xff0c;工业领域相关控制及信息系统的业务类型不断增加、复杂性不断提升&#xff0c;工业控制网络与工业信息网络也呈现融合趋势&#xff0c;具备支持多业务、多协议、多厂商设备和数据的互联互通、共网承载以及高质量传输能力…

C++ | Leetcode C++题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

p6spy 组件打印完整的 SQL 语句、执行耗时

一、前言 我们来配置一下 Mybatis Plus 打印 SQL 功能&#xff08;包括执行耗时&#xff09;&#xff0c;一方面可以了解到每个操作都具体执行的什么 SQL 语句&#xff0c; 另一方面通过打印执行耗时&#xff0c;也可以提前发现一些慢 SQL&#xff0c;提前做好优化&#xff0c…

CVPR 2024 | 双手协作双物体的数据集TACO:引领可泛化手物交互的新方向

论文题目&#xff1a; TACO: Benchmarking Generalizable Bimanual Tool-ACtion-Object Understanding 论文链接&#xff1a; https://arxiv.org/pdf/2401.08399.pdf 项目主页&#xff1a; https://taco2024.github.io/ 视频链接&#xff1a; https://www.youtube.com/watch…

机器学习笔记 人脸识别技术全面回顾和小结(1)

一、简述 人脸识别是视觉模式识别的一个细分问题。人类一直在识别视觉模式&#xff0c;我们通过眼睛获得视觉信息。这些信息被大脑识别为有意义的概念。对于计算机来说&#xff0c;无论是图片还是视频&#xff0c;它都是许多像素的矩阵。机器应该找出数据的某一部分在数据中代表…

OBD诊断(ISO15031) 02服务

文章目录 功能简介请求和响应1、read-supported PIDs1.1、请求1.2、肯定响应 2、read PID value1.1、请求1.2、肯定响应 3、同时请求多个PID4、同时读取多个PID数据 Parameter definition报文示例1、单个PID请求和读取2、多个PID请求和读取 功能简介 02服务&#xff0c;即 Req…

【技术追踪】UNest:一种用于非配对医学图像合成的新框架(MICCAI-2024)

前天看了一篇文章图像分割用diffusion&#xff0c;今天看了篇文章图像合成不用diffusion&#xff0c;你说说这~ 传送门&#xff1a;【技术追踪】SDSeg&#xff1a;医学图像的 Stable Diffusion 分割&#xff08;MICCAI-2024&#xff09; UNest&#xff1a;UNet结构的Transforme…

收银系统源码-千呼新零售【分销商城】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

帮助某服务业公司制定发展战略与未来规划

在集团公司高速发展、业务范围不断扩大时&#xff0c;组织往往对公司未来的发展方向感到迷茫&#xff0c;不知道如何进行更好的规划&#xff0c;找到合适的发展战略&#xff0c;为企业提供更长远的发展空间&#xff0c;带来更多是利益。面对这个问题&#xff0c;华恒智信认为企…

【知识学习】Unity3D中Post Processing的概念及使用方法示例

Unity3D中的Post Processing&#xff08;后处理&#xff09;是一种在渲染管线的最后阶段对最终图像进行处理的技术。它允许开发者添加各种视觉效果&#xff0c;如模糊、颜色分级、镜头光晕等&#xff0c;以增强场景的视觉表现力。 Post Processing 的基本概念 Post Processin…