JavaSE学习值之--String类
💕"不要同情自己,同情自己是卑劣懦夫的勾当!"💕
作者:Mylvzi
文章主要内容:JavaSE学习值之--String类
目录
前言:
一.String类
1.String类的属性
2.字符串的构造
注意:
1.String类有求字符串长度的方法通过:str.length()
2.isEmpty方法用于判断字符串的长度是否为0
3.被" "引起来的就是字符串,可直接调用方法
3.String类对象的比较
1.==判断是否是同一引用(地址相同)
2.equals 方法
3.compareTo以及他的接口
4. 字符串查找
1.charAt方法--》返回对应索引上的字符
2.indexOf方法,lastIndexOf 方法--》不止一个,有多个,构成了方法的重载
1.单个字符(从前往后找)
2.查找子字符串(从前往后找)
5.字符串的转化
1.数值和字符串之间的转化
2.大小写互换--》toUpperCase toLowerCase
3.. 字符串转数组
4. 格式化(以特定的格式输出字符串)
6.字符串替换
7.字符串的拆分
1.split方法--》返回值是String[],所以要用字符串数组接收
2.特殊字符的拆分
1.拆分IP地址
2.多次分割(开发常用)
7.字符串截取
8.其他操作方法
1.trim方法:
8.字符串的不可变性
1.这张图能反应很多信息:
2.所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
二.StringBuilder和StringBuffer的介绍
一.StringBuilder
常见方法总结:
1.append--》字符串追加
2.setCharAt(int index, char ch)-->将index位置的字符重置为ch
3.insert(int offset, String str) -->在offset位置插入:八种基类类型 & String类型 & Object类型数据
4.deleteCharAt(int index)--》删除index位置字符
5.replace(int start, int end, String str)--》将指定区间的字符串设置为str
6.StringBuffer reverse()-->倒置字符串
7.toString方法-->以字符串(String)类型返回
前言:
在C语言中我们已经接触过字符串,在C语言中不存在字符串类型,存储字符串往往是通过字符数组或字符指针,同时C语言的库中也提供了很多与字符串有关的函数,如strcpy,strcat,strstr等等,但是这种将数据和操作方法分割的做法不符合面向对象编程的思想,所以在Java中提供了字符串类型--》String
String类本质上是class,含有属性和方法,方法之中存放了大量且实用的与字符串有关的方法
下面就为大家详细讲解String类
一.String类
1.String类的属性
注意:Java中的字符串区别于C语言,并不存在“字符串以\0结尾”这种说法
2.字符串的构造
下面介绍常见的三种字符串构造方法:
/*** 字符串构造*/// 1.直接构造String str1 = "hello";System.out.println(str1);// 2.实例化一个String类对象String str2 = new String("hello");System.out.println(str2);// 3.通过字符数组的转化char[] arr = {'h','e','l','l','o'};String str3 = new String(arr);System.out.println(str3);
注意Java中String类是一种引用数据类型,存放的引用对象的地址,而不存储对象本身
// String类是一种引用类型,存储的是对象的地址// s1和s2引用的是不同对象 s1和s3引用的是同一对象String s1 = new String("hello");String s2 = new String("world");String s3 = s1;System.out.println(s1.length()); // 获取字符串长度---输出5System.out.println(s1.isEmpty()); // 如果字符串长度为0,返回true,否则返回false
注意:
1.String类有求字符串长度的方法通过:str.length()
STtring类里面的length是一种方法,数组里面的是一种属性,方法有一个();
2.isEmpty方法用于判断字符串的长度是否为0
注意isEmpty判断的是字符串的长度,如果字符串是null,此时代表空引用,编译器会报错
String s1 = "";System.out.println(s1.length());// 输出0String s2 = null;System.out.println(s2.length());// 报错
3.被" "引起来的就是字符串,可直接调用方法
System.out.println("hello".length());// 输出5
3.String类对象的比较
1.==判断是否是同一引用(地址相同)
==
左右两边都是基本数据类型,比较的是值的大小,根据值是否相等返回false/true
左右两边都是引用数据类型,比较的是引用对象的地址是否相同,也就是是否是同一引用
// String类是一种引用类型,存储的是对象的地址// s1和s2引用的是不同对象 s1和s3引用的是同一对象String s1 = new String("hello");String s2 = new String("world");String s3 = s1;System.out.println(s1 == s2);// falseSystem.out.println(s2 == s3);// falseSystem.out.println(s1 == s3);// true
来看一种特殊情况:
当我们直接引用字符串”hello“ 时,str1和str2却相等了?这是为什么?引用类型比较的不是地址吗?是的,比较的是地址。但对于"hello"这样的字符串来说,他是存储在堆区之中的”常量池“上,地址是固定的。也就是说,当第一次使用hello给str1赋值后,常量区上就已经存放了hello这个字符串,再次赋值是会先从常量池中的"hello"获取,获取的和str1是一样的"hello"(地址和值都是一样的)
2.equals 方法
==只能用来比较两个引用对象的地址是否相同,而大多数情况下我们是通过引用类型的内容来判断是否相等的,对于String类来说也是这样的,我们要比较的是字符串的具体内容,而String类中有一个自带的比较内容的方法-->equals(本质还是继承于Object类的
)
String str1 = "hello";String str2 = "hello";String str3 = "world";System.out.println(str1.equals(str2));// trueSystem.out.println(str1.equals(str3));// false
总结:
equals方法用来判断两个字符串的内容是否相同
3.compareTo以及他的接口
再来看String类的定义:
可以看见String类实现了Comparable接口,所以就要重写接口中的compareTo方法
比较思路:
如果两个字符串的长度不一样,先比较长度相同的部分,如果长度相同部分完全相同,则直接返回长度的差值(共同长度是最短字符串的长度)
代码示例:
String str1 = "hello";String str2 = "hello";String str3 = "world";String str4 = "helloworld";System.out.println(str3.compareTo(str1));// 15System.out.println(str1.compareTo(str2));// 0System.out.println(str4.compareTo(str1));// 输出5System.out.println("====================");String str5 = "abc";String str6 = "acc";System.out.println(str5.compareTo(str6));// 输出-1
compareToIgnoreCase方法
在一些情况下,我们认为大写和小写只是形式上的不同,内容却是相同的,比如"hello"=="HELLO",在不考虑大小写的情况下进行比较,就可以利用方法
compareToIgnoreCase
String str1 = "hello";String str2 = "HELLO";String str3 = "HEllo";System.out.println(str1.compareToIgnoreCase(str2));// 0System.out.println(str1.compareToIgnoreCase(str3));// 0
总结:
1.compareTo方法返回的Int类型的数据,本质上是对应字符串在字典上的顺序(字典中,前面的字母是小的,后面的字母大,小写比所有大写大)2.忽略大小写带来的形式上的不同,我们可以利用compareToIgnoreCase方法
3.自定义类型一定要重写equals方法和hashcode方法,因为你的逻辑是根据自定义类型的内容进行比较的
4. 字符串查找
字符串查找也是字符串中非常常见的用法,String类中也提供了很多字符串查找的方法
1.charAt方法--》返回对应索引上的字符
String str1 = "abcdef";System.out.println(str1.charAt(0));// 输出aSystem.out.println(str1.charAt(1));// 输出bSystem.out.println(str1.charAt(2));// 输出cSystem.out.println(str1.charAt(-1));// 异常System.out.println(str1.charAt(100));// 异常
2.indexOf方法,lastIndexOf 方法--》不止一个,有多个,构成了方法的重载
1.单个字符(从前往后找)
String str1 = "abcdefghcde";System.out.println(str1.indexOf('a'));// 0System.out.println(str1.indexOf('b'));// 1System.out.println(str1.indexOf('c'));// 2System.out.println("==================");System.out.println("从指定index开始访问");System.out.println(str1.indexOf('c', 3));// 8 返回的是第二个c出现的位置System.out.println(str1.indexOf('a', 1));// -1 1代表从b开始,后面不含有aSystem.out.println("==================");System.out.println("从后往前找");System.out.println(str1.lastIndexOf('c'));// 8System.out.println(str1.lastIndexOf('e'));// 10System.out.println(str1.lastIndexOf('c', 4));// 2
注意:indexOf方法只返回第一次出现的下标(从左往右)
2.查找子字符串(从前往后找)
String str1 = "abcdefghcde";// 返回子字符串第一次出现位置的下标System.out.println(str1.indexOf("ab"));System.out.println(str1.indexOf("cd"));System.out.println(str1.indexOf("de"));System.out.println("===================");System.out.println("从指定索引位置之后返回子字符串出现的位置");System.out.println(str1.indexOf("cd", 4));// 8System.out.println(str1.indexOf("de",6));// 9System.out.println("===================");System.out.println("从后往前查找");/*** 注意返回都是第一个字符的下标*/System.out.println(str1.lastIndexOf("cd"));// 8System.out.println(str1.lastIndexOf("de"));// 9System.out.println(str1.lastIndexOf("cd", 5));// 2
5.字符串的转化
1.数值和字符串之间的转化
class Student {String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}
}
public class Test1 {public static void main(String[] args) {/*** 其他类型转字符串(布尔类型和引用类型也能转化)* String.valueOf方法*/String s1 = String.valueOf(1234);String s2 = String.valueOf(12.34);String s3 = String.valueOf(true);String s4 = String.valueOf(new Student("Hanmeimei", 18));System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println(s4);System.out.println("=======================");/*** 字符串转其他类型* 通过其他类型的包装类中的parse方法*/int a = Integer.parseInt("12345");double b = Double.parseDouble("12.20");boolean c = Boolean.parseBoolean("true");System.out.println(a);System.out.println(b);System.out.println(c);
2.大小写互换--》toUpperCase toLowerCase
String str1 = "hello";String str2 = "WROLD";String str3 = "Hello";// 小写转大写System.out.println(str1.toUpperCase());// 大写转小写System.out.println(str2.toLowerCase());System.out.println(str3.toLowerCase());
3.. 字符串转数组
String str1 = "hello";char[] value = str1.toCharArray();for (int i = 0; i < value.length ; i++) {System.out.print(value[i] + " ");}System.out.println();System.out.println("====================");// 字符数组转字符串(字符串的构造)char[] value2 = {'h','e','l','l','o'};String str2 = new String(value2);System.out.println(str2);
4. 格式化(以特定的格式输出字符串)
String s = String.format("%d-%d-%d", 2019, 9,14);System.out.println(s);// 输出2019-9-14
6.字符串替换
用另一个字符串代替当前字符串中的某些内容
String str1 = "hello world";// 单个字符替换System.out.println(str1.replace('o', 'x'));// hellx wxrld 两个o都被替换了// 字符串替换System.out.println(str1.replace("hello", "xxxxxxx"));// 替换首个位置// replaceFirst的参数只能是字符串System.out.println(str1.replaceFirst("o","x"));// hellx world 只替换第一个o// replaceAll 用于基于正则表达式的文本替换System.out.println(str1.replaceAll("o", "x"));// replace的返回值是一个新的字符串,不是对原字符串进行修改// java中字符串是常量,无法被修改String str2 = str1.replace('e','d');
7.字符串的拆分
1.split方法--》返回值是String[],所以要用字符串数组接收
String str1 = "how are you man?";String[] value = str1.split(" ");for (String s:value) {System.out.println(s);}System.out.println("===================");// 就分两组String[] value2 = str1.split(" ",2);for (String s:value2) {System.out.println(s);}
2.特殊字符的拆分
在使用split方法时,传递的参数是字符,但是有些字符本身就有特定的作用(+-*\等等),需要使用转义字符进行转义
1.拆分IP地址
String str = "192.168.1.1" ;String[] result = str.split("\\.") ;for(String s: result) {System.out.println(s);}
1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\" ,那么就得写成 "\\\\" .
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符
String str = "192\\168\\1\\1" ;// 在字符串中使用\需要先进行转义String[] result = str.split("\\\\") ;for(String s: result) {System.out.println(s);
}
2.多次分割(开发常用)
在进行分割时,一个字符串内往往含有多个不同的符号,一次split只能以一个符号进行分割,如果想实现多次分割,可以利用嵌套的for循环进行多次分割
public static void main(String[] args) {String str = "name=李四&age=17";String[] arr1 = str.split("&");for (int i = 0; i <arr1.length ; i++) {String[] tmp = arr1[i].split("=");System.out.println(tmp[0]+" = "+ tmp[1]);}}
7.字符串截取
从当前字符串某个索引位置处进行截取
String str = "helloworld";System.out.println(str.substring(5));// 输出worldSystem.out.println(str.substring(0, 5));// 输出hello java中的区间都是左闭右开的
注意事项:
1. 索引从0开始
2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标
8.其他操作方法
1.trim方法:
代码示例:
String str = " hello world !!!!!!!!!";System.out.println(str.trim());
注意:
1.trim方法只能去除字符串左右两边的空格,中间的空格无法删除
2.trim方法其实在搜索引擎中经常出现,比如你故意在搜索时在前面添加了一大堆的空格,而你在搜索的时候,浏览器会自动把字符前面的所有空格进行删除,这就是调用了trim方法
8.字符串的不可变性
String类型的数据是一种不可改变的数据类型,来看她的定义
1.这张图能反应很多信息:
1.String类被final修饰,代表不能被其他类继承
2.字符串实际上是存储在Value数组之中的,value也是一种引用类型
3.value数组被private修饰,代表无法在类外使用该数组,也就证明该数组的内容无法改变,也就是字符串的内容无法改变
一个误区:
很多人说String类无法改变是因为value数组被final修饰,这是错误的,因为value数组被final修饰,只能说明value不能指向其他的引用,但是其所指向的对象是可以改变的(类似于const char*)
final int[] arr = {1,2,3,4,5};arr[0] = 10000;System.out.println(Arrays.toString(arr));
2.所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
StringBuilder也是与字符串相关的一个类,其中有一个append方法,用于字符串的追加
可以发现,在对字符串s进行追加时,实际上是又重新创建了一个字符串,使这个字符串为两个字符串append之后的结果,最后再将这个字符串重新赋值给s
二.StringBuilder和StringBuffer的介绍
前言:
由于stirng的不可改变性,对于字符串的操作有了一定的限制,为了更加方便地操作字符串,引入两个新的类:StringBuilder和StringBuffer,这两个类的基本用法一致
一.StringBuilder
常见方法总结:
1.append--》字符串追加
//StringBuilder是一个类,必须先进行实例化对象StringBuilder str = new StringBuilder("hello");StringBuilder str2 = str;// 利用append进行追加 可追加字符,数字,字符串str.append(' ');str.append(123);str.append("world");str.append('!');System.out.println(str);
注意:
1.append方法的存在大大提高了新建字符串的效率,因为append方法在执行的时候是直接在位于缓冲区的字符数组之后添加字符的,并没有新建临时对象,减少了内存的不必要开辟和释放
2.可直接打印StringBuilder类的对象,因为其内部重写了toString方法
2.setCharAt(int index, char ch)-->将index位置的字符重置为ch
StringBuilder str = new StringBuilder("hello");str.setCharAt(0,'!');str.setCharAt(1,'!');str.setCharAt(2,'!');System.out.println(str);
3.insert(int offset, String str) -->在offset位置插入:八种基类类型 & String类型 & Object类型数据
StringBuilder str = new StringBuilder("hello");// insert方法// 并没有删除原位置的字符,而是在其之前插入另一个数据str.insert(0,'!');System.out.println(str);// !hellostr.insert(6,"world");System.out.println(str);// !helloworldstr.insert(0,123456);System.out.println(str);// 123456!helloworld
注意: insert方法并没有删除原位置的字符,而是在其之前插入另一个数据
4.deleteCharAt(int index)--》删除index位置字符
StringBuilder str = new StringBuilder("hello");System.out.println(str.deleteCharAt(0));// elloSystem.out.println(str.deleteCharAt(0));// llo// delete 删除指定区间内的所有字符StringBuilder str2 = new StringBuilder("hello");System.out.println(str2.delete(0, 2));// llo
5.replace(int start, int end, String str)--》将指定区间的字符串设置为str
StringBuilder str = new StringBuilder("hello!!!!");str.replace(1,6,"world");System.out.println(str);// hworld!!!
6.StringBuffer reverse()-->倒置字符串
StringBuilder str = new StringBuilder("hello!!!!world");System.out.println(str.reverse());// dlrow!!!!olleh
这是一个非常有用 的方法,在很多刷题网站中都有倒置字符串的实现,通过S听Builder自带的reverse方法可以快速实现!!!
源码:
public AbstractStringBuilder reverse() {boolean hasSurrogates = false;int n = count - 1;for (int j = (n-1) >> 1; j >= 0; j--) {int k = n - j;char cj = value[j];char ck = value[k];value[j] = ck;value[k] = cj;if (Character.isSurrogate(cj) ||Character.isSurrogate(ck)) {hasSurrogates = true;}}if (hasSurrogates) {reverseAllValidSurrogatePairs();}return this;}
7.toString方法-->以字符串(String)类型返回
String和StringBuffer不能直接赋值,必须通过StringBuffer的toString方法才能转换
StringBuilder str = new StringBuilder("hello!!!!world");
// String str2 = str;// errString newstr = str.toString();System.out.println(newstr);// hello!!!!world
StringBuilder和StringBuffer也包含String类型中常见的方法,如indexOf,charAt,substring,length等方法,其用法和String类基本一致,此处不再详细阐述
总结:
String类是一个非常常用的类,要掌握其包含的常见方法的使用,深入理解String不能被改变和继承的原因;同时为了解决String类的一些缺陷,引入了两个新的类 StringBuilder和StringBuffer,这两个类可以看作String类的更高效的版本,其中有很多方法与String类重合,但也有很多自己独有的,非常有效的方法,了解这些方法会大大提高我们的开发效率!!!
相关文章:

JavaSE学习值之--String类
💕"不要同情自己,同情自己是卑劣懦夫的勾当!"💕 作者:Mylvzi 文章主要内容:JavaSE学习值之--String类 目录 前言: 一.String类 1.String类的属性 2.字符串的构造 注意…...

【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题
文章目录 【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题⛅前言员工的直属部门🔒题目🔑题解 判断三角形🔒题目🔑题解 连续出现的数字🔒题目🔑题解 指定日期的产品价格🔒题目&am…...

基于单片机的汽车智能仪表的设计
基于单片机的汽车智能仪表的设计 摘要:汽车的汽车系统。速度测量以及调速是我们这次的设计所要研究的对象,本次设计的基础核心的模块就是单片机,其应用的核心的控制单元就是stc89c52单片机,用到的测速模块是霍尔传感器,…...

【Docker 内核详解】namespace 资源隔离(一):进行 namespace API 操作的 4 种方式
namespace 资源隔离(一):进行 namespace API 操作的 4 种方式 1.通过 clone() 在创建新进程的同时创建 namespace2.查看 /proc/[pid]/ns 文件3.通过 setns() 加入一个已经存在的 namespace4.通过 unshare() 在原先进程上进行 namespace 隔离5…...

【技术研究】环境可控型原子力显微镜超高真空度精密控制解决方案
摘要:针对原子力显微镜对真空度和气氛环境精密控制要求,本文提出了精密控制解决方案。解决方案基于闭环动态平衡法,在低真空控制时采用恒定进气流量并调节排气流量的方法,在高真空和超高真空控制时则采用恒定排气流量并调节进气流…...

【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上,提供了一种集中管理应用程序状态的方式。使用Vuex,您可以将应用程序的状态存储在一个单一的位置(即“存储”)中,…...

python经典百题之简单加密数据
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换 程序分析 对于…...

登陆认证权限控制(1)——从session到token认证的变迁 session的问题分析 + CSRF攻击的认识
前言 登陆认证,权限控制是一个系统必不可少的部分,一个开放访问的系统能否在上线后稳定持续运行其实很大程度上取决于登陆认证和权限控制措施是否到位,不然可能系统刚刚上线就会夭折。 本篇博客回溯登陆认证的变迁历史,阐述sess…...

单点接地、多点接地、混合接地
有三种基本的信号接地方式:浮地、单点接地、多点接地。 浮地:目的是使电路或设备与公共地线可能引起环流的公共导线隔离起来,浮地还使不同电位的电路之间配合变得容易。缺点:容易出现静电积累引起强烈的静电放电。折中方案:接入泄…...

【C++初阶(一)】学习前言 命名空间与IO流
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...

flask vue跨域问题
问题: 调试时候跨域访问报: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法: 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…...

stm32(二十)IAP升级优化(双缓存,可恢复)
这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能, 主要记录一下自己的思路,无代码,实在是代码感觉没啥写的,都是一些网上很多流传的东西。 1、开发环境 Keilstm32f103JLINK 2、程序思路 在升级中,必…...

HDLbits:Exams/ece241 2013 q4
本题是一个实际的应用问题,一个水库,有三个传感器S1、S2、S3提供输入,经过控制电路,四个输出给到四个流量阀。也就是说,本题想让我们根据水位去控制流量阀。 问题的关键在于把什么抽象成state,答案是&…...

什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

Response Status Code 301、302
目录 Information Django redirect Influence Information HTTP状态码301、302和304分别表示以下情况: codeinformation301(Moved Permanently) 永久重定向。当请求的资源已经被永久地移动到了一个新的URI时,服务器会返回这个…...

import { ref, onMounted, reactive } from ‘vue‘
ref, onMounted, reactive 用于创建和操作响应式数据、生命周期钩子。 1.ref 用来创建一个响应式的引用(Reactive Reference)的函数,主要用于创建基本数据类型(如数字、字符串等)的响应式数据。 通过 ref 创建的变…...

【TB作品】基于MSP430G2553单片机的超声波测距与报警系统,原理图,PCB
功能: 1 超声波测距显示 2 按键设置报警上下限 3 蜂鸣器报警 原理图: PCB样式: 实物: 代码: https://github.com/xddun/blog_code_search...

npm install报错
在命令提示符窗口下载npm,报错如下: $npm install报错信息如下: npm WARN old lockfile npm WARN old lockfile The package-lock.json file was created with an old version of npm, npm WARN old lockfile so supplemental metadata must…...

Flutter自定义model实体类
在某些场景下,我们可能需要自定义Flutter model实体类,来创建更加结构化和有组织的代码,提高代码的可重用性,并增强Flutter应用程序的整体可维护性。 自定义小部件:在创建自己的小部件时,可能需要定义自定义数据类型来…...

java项目实现不停服更新的4种方案(InsCode AI 创作助手)
文章目录 1. Blue-Green 部署2. 滚动更新3. 使用负载均衡器4. 灰度发布 在软件开发和维护中,不停机更新是确保应用程序持续可用的关键任务之一。以下是四种常见的不停机更新策略及其示例: 1. Blue-Green 部署 概念: Blue-Green 部署是一种部…...

7.1 yolov5优化模型时,自动标注xml数据
yolov5优化模型时,一般需要继续标注一些检测错误的图片,将其标为xml数据。以下是根据训练好的模型自动标注xml数据的python代码: 注意:代码中包含了本人的yolov5的测试过程,测试过程可以自己根据yolov5的测试文件自行…...

开发者职场“生存状态”大调研报告分析 - 第一版
听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…...

在MySQL中使用!=还能走索引吗?
在MySQL中使用!还能走索引吗? 一般情况下,我们会在一个索引上较多的使用等值查询或者范围查询,此时索引大多可以帮助我们极快的查询出我们需要的数据。 那当我们在where条件中对索引列使用!查询,索引还能发挥他的作用吗…...

【算法题】2897. 对数组执行操作使平方和最大
题目: 给你一个下标从 0 开始的整数数组 nums 和一个 正 整数 k 。 你可以对数组执行以下操作 任意次 : 选择两个互不相同的下标 i 和 j ,同时 将 nums[i] 更新为 (nums[i] AND nums[j]) 且将 nums[j] 更新为 (nums[i] OR nums[j]) &#…...

2023年中国划船机产量、销量及市场规模分析[图]
划船机是一种健身器材,它模拟了划船的运动,可以锻炼身体的肌肉力量和协调性。划船机通常由座椅、把手、脚踏板和传动装置组成,使用者可以通过拉动把手来模拟划船的动作,从而达到锻炼身体的目的。 划船机产业链 资料来源ÿ…...

Kafka和RabbitMQ的对比
Rabbitmq比kafka可靠,kafka更适合IO高吞吐的处理,比如ELK日志收集 Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。 a) 以下场景比较适合使用Kafka。如果有大量的事…...

ffmpeg从一个视频中提取音频
ffmpeg -i ~/video/video.mp4 -vn -acodec copy ~/video/audioFile.m4a 从video.mp4中提取音频到文件audioFile.m4a中 查看提取的音频文件 ffprobe ~/video/audioFile.m4a...

CCF CSP题解:坐标变换(其一)(202309-1)
链接 OJ链接:传送门 AC代码 #include <iostream>using namespace std;int n, m;int dx 0, dy 0;int main() {cin >> n >> m;for (int i 0; i < n; i) {int x, y;cin >> x >> y;dx x;dy y;}for (int i 0; i < m; i) {i…...

跳表C语言
【C语言】算法学习跳表_c语言跳表-CSDN博客 leetcode原题,代码如下 #define MAX(a, b) ((a) > (b) ? (a) : (b)) const int MAX_LEVEL 32; const int P_FACTOR RAND_MAX >> 2;typedef struct SkiplistNode {int val;int maxLevel;struct SkiplistNode…...

【JavaEE】_tomcat的安装与简单使用
目录 1. 安装tomcat 1.1 下载tomcat并解压缩 1.2 启动tomcat 1.3 访问tomcat欢迎页面 2. tomcat简单使用:部署前端代码 3. 基于tomcat的网站后端开发 tomcat是一个HTTP服务器,HTTP协议就是HTTP客户端与HTTP服务器之间通信使用的协议。 其中HTTP客…...