数组Arrays,排序算法,String类,Stringbulider,正则表达式

## 数组

排序

经典的三大排序:冒泡,选择,插入

(一)冒泡排序核心:数组中的 相邻 两项比较,交换(正序or倒序)

正序原理图:在这里插入图片描述
在这里插入图片描述
代码实现:

    public static void sort(int[] a){for (int i = 0; i < a.length; i++) {//i < a.length-1 也可以for (int j = 0; j < a.length-i-1; j++) {//-1防止数组越界if (a[j]>a[j+1]){//相邻int temp = a[j];a[j]=a[j+1];a[j+1]=temp;}}}

问题:如果数组本身有序,依然进行大量比较,但没有排序交换。

做一个开关判断

package com.ffyc.Sort;/*** 冒泡排序--"相邻"*/
public class BubbleSortDemo {public static void sort(int[] a){for (int i = 0; i < a.length; i++) {//控制冒泡排序次数//a.length-1 也可以boolean f= true;//开关for (int j = 0; j < a.length-i-1; j++) {//-1防止数组越界 -i相当于优化了一下下if (a[j]>a[j+1]){//相邻f=false;int temp = a[j];a[j]=a[j+1];a[j+1]=temp;}}if (f) break;}
}
public static void print(int[] a){for (int t : a){System.out.print(t+"\t");}
}public static void main(String[] args) {int[] a = {1,2,3,6};sort(a);print(a);}
}

(二)选择排序

核心:一次循环找出最大/小值

原理图:
在这里插入图片描述

代码:
在这里插入图片描述

//优化:减少交换次数

package com.ffyc.Sort;/*** 选择排序*/public class SelectSortDemo {public static void sort(int[] a){for (int i = 0; i < a.length; i++) {int min = a[i];int pos = i;for (int j = i+1 ;j <a.length ; j++) {if (min > a[j]){//不是最小值min = a[j];pos = j;//j是最小值的下标位置}}//找到最小值之后进行交换a[pos]=a[i];a[i]=min;}}public static void print(int[] a){for (int t : a){System.out.print(t+"\t");}}public static void main(String[] args) {int [] a= {4,3,6,1,8};sort(a);print(a);}
}

常规和优化耗时比较:

 public static void sort(int[] a) {//优化long s1 = System.nanoTime();for (int i = 0; i < a.length; i++) {int min = a[i];int pos = i;for (int j = i + 1; j < a.length; j++) {if (min > a[j]) { //不是最小值min = a[j];pos = j;  //j是最小值位置}}//找到最小值之后进行交换a[pos] = a[i];a[i] = min;}long s2 = System.nanoTime();System.out.println("耗时1: " + (s2 - s1));}public static void sortx(int[] a) {//原始long s1 = System.nanoTime();for (int i = 0; i < a.length; i++) {int min = a[i];for (int j = i + 1; j < a.length; j++) {if (min > a[j]) { //不是最小值min = a[j];a[j] = a[i];a[i] = min;}}}long s2 = System.nanoTime();System.out.println("耗时x: " + (s2 - s1));}

(三)插入排序–联想“打扑克”

覆盖过程
在这里插入图片描述在这里插入图片描述
希尔排序

bigO表示法

O(n)

O(1)

在这里插入图片描述

O(n)

取平均,去掉常数;O(n/2+1)==》O(n)

在这里插入图片描述

O(n^2)

不一样是O(n*m)

空间复杂度稳定,

在这里插入图片描述
循环分开实现O(2n),比嵌套的效率高O(n2)–>O(n)<O(n2)

数组辅助类:Arrays

数组转换为字符串

Arrays**.toString**(数组)–>字符串

fill

填充,和sort一样可以选择范围

equals

在这里插入图片描述

copyof

数组拷贝

binarySearch

二分查找(前提:有序)

在这里插入图片描述

结果<0 ===》 代表没找到

在这里插入图片描述

数组删除问题

在这里插入图片描述

Arrays.copyOfRange 是Java中的一个数组操作方法,它用于复制指定数组的指定范围的元素到一个新数组中。这个方法的详细用法和示例如下:

[Arrays.copyOfRange) 用法:左闭右开

javapublic static int[] copyOfRange(int[] original, int from, int to)

参数说明:

  • original:要复制的原始数组。
  • from:复制的起始索引(包含)。
  • to:复制的结束索引(不包含)。
  • 注:数组位置从0开始,length不是最后一个,length-1是最后一个。

多维数组(二维)

本质:一维数组——看作一张表,行-列,坐标

一维数组

紧紧相连,不断开;断开就成链表了

在这里插入图片描述

二维数组

定义:一维数组的元素是一个一维数组。

在这里插入图片描述

int [][] a = new int[5][];//false	
int [][] a = new int[][5];//true

java需要确定的是行(一维数组)。

在这里插入图片描述

打印:

​ String[] ball = {“●”, “○”};

在这里插入图片描述

String——第九大类型

能够使用String,char[];String不是基本类型

在这里插入图片描述

字符串

本质是字符数组

在这里插入图片描述

字符串长度获取

str.length

字符串和字符数组的转换

在这里插入图片描述

问题:有一个字符串“apple”,统计出现次数最多的字符。

桶排序

在这里插入图片描述

Api==》接口(别人写好的)

常用的几个(Application Programming Interface)

  1. trim:常用于从用户输入中去除(第一个字符之前的空格,最后一个字符之后空格)不必要的空格,或者验证输入是否为空。

  2. toUppercase:转大写

  3. toLowcase:转小写

  4. c1.equalsIgnoreCase(c2));//忽略大小写比较

  5. (String)s.charAt(i); //取字符串中的单个字符

  6. ​ s.substring(startIndex,endIndex) : 截取字符串,[左闭右开)

  7. ​ s.spilt(字符串) : 分割字符串

  8. 如果忘了:ctrl+o 找你要用的
    

indexOf()/lastIndexOf()/replace()

  1. indexOf() 方法用于在字符串中查找指定子字符串第一次出现的位置,并返回其索引。如果未找到子字符串,则返回 -1。
  2. lastIndexOf() 方法与 indexOf() 类似,但它是从字符串末尾开始搜索指定子字符串最后一次出现的位置。
  3. replace() 方法用于在字符串中用一个新的子字符串替换匹配的子字符串(或者使用正则表达式替换)。
  • indexOf()lastIndexOf() 用于查找字符串中的子字符串,并返回其索引或者 -1(未找到)。
  • replace() 用于将字符串中的指定子字符串(或者匹配的正则表达式)替换为新的子字符串。

解析-xxx-之间的信息

法一
package com.ffyc.string;public class StringApiDemo04 {public static void main(String[] args) {String str = "001-脱缰凯-男-16-班长-555.00";int s1 = str.indexOf("-");int s2 = str.indexOf("-", s1 + 1);int s3 = str.indexOf("-", s2 + 1);int s4 = str.indexOf("-", s3 + 1);int s5 = str.lastIndexOf("-");//解析 名字String s0 = str.substring(0, s1);//[截取字符)001System.out.println(s0);String s = str.substring(s1+1, s2);//[截取字符)System.out.println(s);String ss = str.substring(s2+1, s3);//[截取字符)System.out.println(ss);String sss = str.substring(s3+1, s4);//[截取字符)System.out.println(sss);String ssss = str.substring(s4+1, s5);//[截取字符)System.out.println(ssss);//解析 薪水String sal = str.substring(s5+1);System.out.println(sal);//递归}
}

在这里插入图片描述

法二 的 函数
    public static void parsex(String str){String[] split = str.split("-");for (String s : split) {System.out.println(s);}}
法三函数
    public static void parse(String str){while (true) {int index = str.indexOf("-");if (index<0){System.out.println(str);break;}System.out.println(str.substring(0,index));str = str.substring(index+1);}}

常用的API总结

编号API解释
1.length长度
2.substring(m,n)截取
3.toUpperCase()大写
4.toLowerCase()小写
5.equals()等于
6.indexOf()子字符串位置
7.trim()去空格
8.replace()替换
9.lastIndexOf()从后向前
10.spilt()分割
11.toCharArrays()数组
12.charAt()某位的字符
13.valueOf()将其他类型转换为字符串
14.endWith()以".jpg"结尾
15.statrWith()以什么开头
16.isEmpty()为空
17.contains()是否存在
18new String(“abc”)产生一个字符串
19.replaceAll()替换所有

在这里插入图片描述

String包

在java.lang包——不用引入

压缩软件可以打开包(文件夹)

(D:)>dev>jdk8>jre >lib >

在这里插入图片描述

完全限定名 就近原则String–》解决用这个完全限定名(下面的黄字打错了)

在这里插入图片描述

import

在这里插入图片描述

package

在这里插入图片描述

在这里插入图片描述

转换为字符串

+

在这里插入图片描述

valueof

在这里插入图片描述

注意区分“拼接”与“运算”
endwith/startwith

在这里插入图片描述

isEmpty 的空 --内容空
  1. 对象存在,里面(内容为空)没有字符 --isEmpty,返回t/f
  2. 对象不存在 --null
    在这里插入图片描述

sum:在这里插入图片描述

产生一个字符串

在这里插入图片描述

下面的是java正常使用的方法,上面是人们简写后的

问题

在这里插入图片描述

???


正则表达式

问题提出

判断一个数全部是数字

在这里插入图片描述

问题解决

写一个表达式按规则完成对字符串的判定过程

在这里插入图片描述

应用场景

身份证
电话号码
邮箱
用户名、密码·

对字符串的特殊要求—— 电话号:1xx 4343

基本表达式

一个【】只匹配一次

匹配一个数字

异或号^ :不是xxx,表示非

[^0-9]//不是0~9的所有字符

match匹配

匹配一个字母

[a-z]

判断是否是中文

[\u4e00-\u9fa5]

package com.ffyc.Regex;/*** 正则表达式——单字符判断*/
public class RegexDemo02 {public static void main(String[] args) {String s = "a";String n = "1";String regex = "[a-zA-Z]";//[]里的多个只代表一个System.out.println(s.matches(regex));System.out.println(n.matches(regex));//判断是否是中文 4e00~9fa5String chinese = "中";String reg = "[\u4e00-\u9fa5]";//- 表示一个范围System.out.println(chinese.matches(reg));}
}
任意字符表示——.(不加【】)

在这里插入图片描述

//true

匹配多个字符{n}

在这里插入图片描述

n:要匹配的个数,精确匹配n次

{m,n}:从m倒n位匹配

{m,}

在这里插入图片描述

+:至少有一次匹配

?:要么零次要么一次

问题:客户输入一个数字(浮点型,整形)

12,6565.448

问题:网站要求使用者年龄范围在18~60之间

客户:21 true

客户: 17 false

|:或者

package com.ffyc.Regex;/*** 18-60*/
public class RegexPro01 {public static void main(String[] args) {String str = "19";/*分组-------------|:或者1.(18,19)2.(2 3 4 5 )(0-9)3.60*/String regex = "(1[8-9])|[2-5][0-9]|(60)";System.out.println(str.matches(regex));}
}

问题:输入一个合法电话号码

1开头 ;3/8/9在第二位 ;后面几位随意

String+正则

spilt()

在这里插入图片描述

replaceAll()

在这里插入图片描述

String问题

本质-源代码-是字符数组–final–是不可以变的
在这里插入图片描述

String s = Str.substring(0,5);//str,s
str = str.substring(0,5);

慢、

在这里插入图片描述

StringBuilder 快

删9

在这里插入图片描述

回文

在这里插入图片描述

StringBuilder版回文

在这里插入图片描述

改成: 在这里插入图片描述

reverse()

字符串反转

在这里插入图片描述

toString()

转换为字符串形式

力扣344 暴力法

在这里插入图片描述

源码
在这里插入图片描述

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

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

相关文章

智慧大棚数据库版

创建一个SMartBigHouse数据库 在数据库创建一个表用来存储数据 这边将id设为主键并将标识增量设为1 搭建Winfrom 搭建历史查询界面 串口数据&#xff0c;(这边是用的一个虚拟的串口工具&#xff0c;需要的话私) ModbusSerialMaster master;DataPointCollection wenduValues; //…

opencascade AIS_Line源码学习

前言 AIS_Line 是 OpenCASCADE 库中的一个类&#xff0c;用于表示和操作三维直线。它可以通过几何线&#xff08;Geom_Line&#xff09;或者两个几何点&#xff08;Geom_Point&#xff09;来初始化。 方法 1 //! 初始化直线 aLine。 Standard_EXPORT AIS_Line(const Handl…

单片机学习历程

学习单片机的过程可以分为几个主要阶段&#xff0c;每个阶段都涉及不同的学习内容和技能提升。下面我将以一个典型的学习历程为例进行介绍&#xff1a; 初学阶段 1.入门理论学习&#xff1a; 开始接触单片机的基础知识&#xff0c;学习其工作原理、体系结构和常见的芯片类型…

Linux_make/Makefile的理解

1.make是一个命令&#xff0c;makefile是一个文件, 依赖关系和依赖方法. a.快速使用一下 i.创建一个Makefile文件(首字母也可以小写) b.依赖关系和依赖方法 i.依赖关系: 我为什么要帮你? mybin:mytest.c ii.依赖方法: 怎么帮? gcc -o mybin mytest.c make之前要注意先创建…

IDEA搭建Vue开发环境(安装Node.js、安装vue-cli、创建项目、编译项目、启动项目、yarn启动项目、npm和yarn命令行命令简单使用)

目录 1. 安装Node.js2. 安装vue-cli构建工具3. 使用vue-cli创建项目4. 启动项目5. IDEA启动vue6. 在IDEA编译vue项目7. 用yarn启动vue项目8. npm和yarn命令行命令简单使用8.1 npm8.2 yarn 1. 安装Node.js Node.js基于Google的V8引擎&#xff0c;形成了一个Javascript的运行环境…

AI绘画SD万能模型 ControlNet Union (也称ControlNet++ 或 ControlNetPlus)!10余种控制效果一键生成!

大家好&#xff0c;我是画画的小强 Controlnet 可以说是目前最重要的一款 AI 绘画控制插件&#xff0c;可以帮我们实现轮廓、深度、动作姿势、颜色等多种控制效果。由于每种控制条件都需要调用不同的控制模型&#xff0c;加上 SD1.5 和 SDXL 的生态并不互通&#xff0c;大家肯…

photoshop学习笔记——选区

选区工具快捷键&#xff1a;M shift M 切换 矩形/椭圆选区工具 基本用法 选区框选出的地方被激活&#xff08;其后进行的操作&#xff0c;仅在选区中生效&#xff09; 选区工具选择后&#xff08;以矩形选区为例&#xff09; 按下鼠标左键拖动&#xff0c;画出一块矩形区…

腾讯云COS异步操作上传(Python)

文章目录 相关概念介绍相关术语SDK使用异步上传文件 相关概念介绍 COS全称“云对象存储”&#xff08;Cloud Object Storage&#xff09;&#xff0c;是一种分布式存储服务&#xff0c;通过将数据作为对象存储&#xff0c;可以实现数据的高可靠性和可扩展性。它通常用于存储非…

《后端程序猿 · @Value 注释说明》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

SQL labs-SQL注入(四,sqlmap对于post传参方式的注入)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 序言&#xff1a;本文主要讲解基于SQL labs靶场&#xff0c;sqlmap工具进行的post传参方式的SQL注入。 传参方式有两类&#xff0c;一类是直接在url栏内进行url编码后进行的传参&am…

Android APK混淆处理方案分析

这里写目录标题 一、前言1.1 相关工具二、Apk 分析2.1 apk 解压文件2.2 apk 签名信息2.3 apk AndroidManifest.xml2.4 apk code三、Apk 处理3.1 添加垃圾文件3.2 AndroidManifest.xml 处理3.3 dex 混淆处理3.4 zipalign对齐3.5 apk 重新签名3.6 apk 安装测试四、总结一、前言 提…

sentinel 服务流量控制 、熔断降级

1、什么是 sentinel,可以用来干什么 sentinel是用来在微服务系统中保护微服务对的作用,如何避免服务的雪崩、熔断、降级,说白了就是用来替换hystrix。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 官网:GitHub - alibaba/Se…

Ubuntu安装QQ教程

Ubuntu安装QQ教程 腾讯更新Linux版的QQ&#xff0c;这里安装一下&#xff1b; 首先&#xff0c;进入官网找到合适对应的安装包&#xff1b; QQLinux版本官网&#xff1a;https://im.qq.com/linuxqq/index.shtml 我们是ubuntu系统选择X86下的deb版本&#xff0c;如果是arm开…

5G单北斗定位工卡

UWB卫星定位工卡&#xff08;HXZK-UBK&#xff09;融合定位系统结合了两种定位技术的优势&#xff0c;从而能够在各种环境下实现更精准、更可靠的定位,UWB&#xff08;ULtra-Wideband&#xff0c;超宽带&#xff09;技术和GNGSS&#xff08;GLobal Positioning System&#xff…

上海浦东装修公司推荐:高端选择,品质生活

在上海浦东这样一个经济繁荣、文化多元的地区&#xff0c;居住环境的品质直接关系到家的感觉。为了追求高品质生活的您&#xff0c;我们精心挑选了五大豪华装修公司。1.即住空间装饰即住空间装饰以其“高效、省心、精工”为核心理念&#xff0c;专注于为追求高品质生活的业主提…

【word转pdf】【最新版本jar】Java使用aspose-words实现word文档转pdf

【aspose-words-22.12-jdk17.jar】word文档转pdf 前置工作1、下载依赖2、安装依赖到本地仓库 项目1、配置pom.xml2、配置许可码文件&#xff08;不配置会有水印&#xff09;3、工具类4、效果 踩坑1、pdf乱码2、word中带有图片转换 前置工作 1、下载依赖 通过百度网盘分享的文…

嵌入式linux系统中压力测试的方法

在Linux环境下,确保系统各项资源充分且稳定地运行对任何系统管理员来说都至关重要。特别是在生产环境中,理解如何对系统资源进行基准测试和压力测试可以帮助预防未来的问题,同时也能够优化现有系统的性能。 在本文中,我们将探讨如何使用命令行工具来对Linux系统的CPU、内存…

科技前沿:Llama 3.1的突破与革新

在科技的长河中&#xff0c;每一次模型的更新都是对人类智慧的致敬。今天&#xff0c;我们将聚焦于Meta公司最新发布的Llama 3.1系列模型&#xff0c;探索其在AI领域的前沿突破。 新模型的诞生 自去年以来&#xff0c;Meta公司不断推进人工智能技术的发展&#xff0c;终于在近…

2024软件测试面试题及答案

【纯干货&#xff01;&#xff01;&#xff01;】花费了整整3天&#xff0c;整理出来的全网最实用软件测试面试大全&#xff0c;一共30道题目答案的纯干货&#xff0c;希望大家多多支持&#xff0c;建议 点赞&#xff01;&#xff01;收藏&#xff01;&#xff01;长文警告&…

学习华为IPD流程黑话2.0

目录 1、内容简介 2、概念六&#xff1a;管道管理 3、概念七&#xff1a;业务计划 4、概念八&#xff1a;IPMT 的投资活动 5、概念九&#xff1a;BETA、ESS、ESP 作者简介 1、内容简介 学习任何新事物都是从概念开始的。 以我个人最近遇到的一个事为例&#xff1a; 前…