当前位置: 首页 > news >正文

常用类(二)--String类的简单总结

文章目录

  • 1.基本介绍
    • 1.1创建对象
    • 1.2找到对应下标的字符
    • 1.3找到对应字符的下标
    • 1.4指定位置开始遍历
    • 1.5反向进行遍历
    • 1.6大小写之间的转换
    • 1.7字符串转换为数组
    • 1.8元素的替换
    • 1.9字符串的分割
    • 1.10字符串的截取
  • 2.StringBuilder和StringBuffer
    • 2.1 StringBuilder的引入
    • 2.2面试题目

1.基本介绍

C语言里面的字符串以\0结尾,java里面没有斜杠0结尾这个说法,C语言里面只能使用字符数组和指针;

1.1创建对象

下面展示的这个就是创建String对象的三个方式:

  • 直接把这个字符串传递过去,下面的就是“abcdef字符串直接传递过去;
  • 因为这个String也是一个类,因此我们就可以直接把这个new的对象传递过去;
  • 第三个方式就是传递我们的字符数组,也是可以帮助我们创建对象,这个其实就是把上面的第二个方式分步操作,显示定义字符数组,然后是把这个字符数组作为参数进行传递,第二个就是直接把这个数组作为参数进行传递;
  • equalsIgnoreCase这个方法是进行字符串之间的比较,但是会忽略大小写;

image-20241011215150305

1.2找到对应下标的字符

下面的这个就是charAt方法,这个方法的作用就是我们把这个下标传递过去,这个时候我们的返回值就是从左向右进行寻找对应下标的元素字符,然后打印输出;

image-20241011215449916

1.3找到对应字符的下标

我们也可以根据这个字符打印输出这个字符的下标,使用的就是我们的indexOf方法进行输出的;

image-20241011215550633

1.4指定位置开始遍历

如果我们想要把这个开始查找的位置进行修改,这个方法里面我们可以进行这个参数的添加,上面的是只给出来一个字符,这个就是从0下标开始查找,但是如果我们给出两个参数:第一个参数是我们开始查找的下标,第二个是查找的字符,这个时候就会从我们指定的下标开始查找;

image-20241011215630287

1.5反向进行遍历

上面的查找是进行的正向的遍历,我们可以使用这个lastIndexOf方法进行反向的便遍历,这个也可以给一个参数,可以给多个参数;

image-20241011215859497

1.6大小写之间的转换

下面的就是两个大小写字母混合组成的一个字符串,这个里面的toUpperCase就是把我们的这个已知的字符串转换为一个全部大写的字符串;

toLowerCase就是把这个已知的字符串转换为全部小写的字符串,但是需要注意的是,我们的这个转换是新创建一个一样的对象,在这个对象的基础上面进行修改,我们的这个修改都不会影响原来的字符串;

image-20241012112811040

1.7字符串转换为数组

为什么要把这个字符串转换为数组,因为转换为数组之后,我们可以使用下标对于这个里面的元素进行遍历和管理,我们可以随时随地的取出来这个数组里面的任意位置的元素;

下面还写了一个format方法,这个方法就是让这个内容以指定的格式打印出来,就是对于我们的这个打印格式进行设置的一个方法;

image-20241012133059195

1.8元素的替换

元素的替换是使用的这个replace关键字,我们的这个replace支持重载方法,下面展示的就是四种重载的方式,第一个表示把a全部替换为k字符,第二个表示把ab字符组合全部替换为klp字符组合,第三个就是把这个里面的第一个ab组合替换为klp,第四个就是把这个里面的所有的ab字符组合替换为klp字符组合这个其实和第二个没有什么区别,酌情进行选择即可;

image-20241012133339093

1.9字符串的分割

这个使用的是我们的split方法,我们的这个参数表示的就是从=位置开始分割,分割成为两个部分,我们分割之后的组成一个数组,我们使用数组进行接收,然后可以使用循环,打印出来分割之后的每一个部分的内容;

下面的这个是点号进行分割,我们的参数需要加上两个斜杠,这个主要是涉及到正则表达式,感兴趣同学课下了解即可;

image-20241012133401655

1.10字符串的截取

截取就是我们从这个字符串里面分割出来我们想要的部分,下面的两种重载的方式,第一个就是使用一个参数的substring,这个表示的就是我们的这个字符串从第三个位置开始截取,没有第二个参数就是默认到最后一个元素才会停止,如果有第二个参数,表示把这个区间里面的字符串进行截取;

image-20241012133435586

2.StringBuilder和StringBuffer

2.1 StringBuilder的引入

因为String的不可变性,为了我们更好的对于这个字符串进行修改,因此这个地方我们提供了StringBuilder和StringBuffer类;

我们下面展示的就是日常我们创建一个字符串,然后使用+进行字符串的拼接,因此这个时候两个部分就拼接到了一起,但是实际上这个是创建了一个对象,把我们的hello追加到这个里面,然后使用append再把这个world再次追加到这个字符串的后面;

因为两次追加之后我们的这个结果仍然是一个StringBuilder,因此这个时候我们使用这个toString方法,把这个对象转换为string类型的,然后打印输出,这个才是+真正发生的过程,而不是像我们的直接拼接那么简单;

image-20241012180023412

在下面的这个append的底层源码里面,我们可以看到这个添加之后就是返回的this,因此可以说明这个就是在原来的这个字符串的基础上进行修改的,然后返回的就是我们修改之后的字符串,这个进一步验证我们的stringBuilder就是可以修改的这个特性;

image-20241012180934578

2.2面试题目

String,StringBuilder,StringBuffer的区别:

  1. String的内容不可以进行修改,StringBuilder,StringBuffer的内容可以进行修改;
  2. StringBuilder,StringBuffer的大部分的功能都是相似的;
  3. StringBuilder采用同步处理,属于线程安全操作,StringBuffer没有采用同步处理,属于不安全操作;
  4. StringBuilder多在单线程的情况下使用,StringBuffer多在多线程的情况下使用

下面的这个同样是一个面试的题目,考察我们对于这个引用的理解,这个里面主要就是画出堆栈图,但是这个题目很容易错误,如果对于这个引用理解的不透彻的话;

public class Example{String str = new String("good");char[ ] ch = { 'a' , 'b' , 'c' };public static void main(String args[]){Example ex = new Example();ex.change(ex.str,ex.ch);System.out.print(ex.str + " and ");System.out.print(ex.ch);}public void change(String str,char ch[ ]){str = "test ok";ch[0] = 'g';}
}

画图分析:从这个图里面我们可以看到原来的指向,以及这个传参之后的指向,我们的str1形参只是引用,这个时候change里面就是让这个形参执行了新的空间罢了,并没有低于这个内容进行修改,这个ch数组才是正经的对于这个引用里面的内容进行了修改,但是我们打印这个ex.str的时候指向的还是我们的原来的good这个内容;

image-20241012190943563

接下来我们还是在这个IDEA里面演示一下两个情形:下面的这个就是为了说明问题,我们的func1方法对于这个传递过来的参数,也是指向了新的空间,并没有修改,而这个func2里面才是修改这个引用指向的内容;

image-20241012191017177

通过这个题目,希望大家可以理解,同样是引用,但是我们的用法不同,结果也是不同的,我们可以让这个引用指向新的空间内容,也可以让这个引用指向的内容进行修改,需要注意甄别~~

[外链图片转存中…(img-JBBf27JB-1728731569799)]

通过这个题目,希望大家可以理解,同样是引用,但是我们的用法不同,结果也是不同的,我们可以让这个引用指向新的空间内容,也可以让这个引用指向的内容进行修改,需要注意甄别~~

相关文章:

常用类(二)--String类的简单总结

文章目录 1.基本介绍1.1创建对象1.2找到对应下标的字符1.3找到对应字符的下标1.4指定位置开始遍历1.5反向进行遍历1.6大小写之间的转换1.7字符串转换为数组1.8元素的替换1.9字符串的分割1.10字符串的截取 2.StringBuilder和StringBuffer2.1 StringBuilder的引入2.2面试题目 1.基…...

Spring Boot开发:从入门到精通

Spring Boot开发:从入门到精通 当你在开发一个新的Java应用时,是否曾经感到苦恼于繁琐的配置和重复的代码?Spring Boot就像一位友好的助手,向你伸出援手,让开发变得轻松愉快。从这一单一框架中,你可以快速…...

《数据结构》--队列【各种实现,算法推荐】

一、认识队列 队列是一种常见的数据结构,按照先进先出(FIFO,First In First Out)的原则排列数据。也就是说,最早进入队列的元素最先被移除。队列主要支持两种基本操作: 入队(enqueue&#xff0…...

面试八股文对校招的用处有多大?--GDB篇

前言 1.本系列面试八股文的题目及答案均来自于网络平台的内容整理,对其进行了归类整理,在格式和内容上或许会存在一定错误,大家自行理解。内容涵盖部分若有侵权部分,请后台联系,及时删除。 2.本系列发布内容分为12篇…...

Unity用VS打开FGUI脚本变成杂项怎么处理?

在Unity中使用Visual Studio(VS)打开FGUI脚本时,如果脚本显示为杂项文件,这通常意味着VS没有正确识别或关联这些脚本文件。以下是一些解决此问题的步骤: 对惹,这里有一个游戏开发交流小组,大家…...

交叉熵损失函数(Cross-Entropy Loss Function)解释说明

公式 8-11 的内容如下: L ( y , a ) − [ y log ⁡ a ( 1 − y ) log ⁡ ( 1 − a ) ] L(y, a) -[y \log a (1 - y) \log (1 - a)] L(y,a)−[yloga(1−y)log(1−a)] 这个公式表示的是交叉熵损失函数(Cross-Entropy Loss Function)&#…...

和外部机构API交互如何防止外部机构服务不可用拖垮调用服务

引言 在现代的分布式系统和微服务架构中,服务之间的通信往往通过API进行,尤其是在与外部机构或第三方服务进行交互时,更需要通过API实现功能的集成。然而,由于外部服务的可控性较差,其服务的不可用性(如响…...

自动猫砂盆真的有必要吗?买自动猫砂盆不看这四点小心害死猫。

现在越来越多铲屎官选择购买自动猫砂盆来代替自己给猫咪铲屎,可是自动猫砂盆真的有必要吗?要知道,在现在忙碌的生活中,有很多人因为工作上的忙碌而不小心忽视了猫咪,猫咪的猫砂盆堆满粪便,要知道猫砂盆一天…...

国外解压视频素材哪里找?五个海外解压视频素材网站推荐

国外解压视频素材哪里找?五个海外解压视频素材网站推荐 如果你正在寻找国外的解压视频素材,那么今天这篇文章一定能帮助你。无论是修牛蹄、洗地毯,还是切肥皂、玩解压游戏等,下面分享的几个网站都是你找到高质量海外解压视频素材…...

Android一个APP里面最少有几个线程

Android一个APP里面最少有几个线程 参考 https://www.jianshu.com/p/92bff8d6282f https://www.jianshu.com/p/8a820d93c6aa 线程查看 Android一个进程里面最少包含5个线程,分别为: main线程(主线程)FinalizerDaemon线程 终结者守护线程…...

位操作解决数组的花样遍历

文章目录 题目 一、思路: 二、代码 总结 题目 leetcodeT289 https://leetcode.cn/problems/game-of-life/description/ 一、思路: 这题思路很简单,对每个位置按照题目所给规则进行遍历,判断周围网格的活细胞数即可。但是题目要求…...

【面试宝典】深入Python高级:直戳痛点的题目演示(下)

目录 🍔 Python下多线程的限制以及多进程中传递参数的⽅式 🍔 Python是如何进⾏内存管理的? 🍔 Python⾥⾯如何拷⻉⼀个对象? 🍔 Python⾥⾯search()和match()的区别? 🍔 lambd…...

Hive数仓操作(十七)

一、Hive的存储 一、Hive 四种存储格式 在 Hive 中,支持四种主要的数据存储格式,每种格式有其特点和适用场景,不过一般只会使用Text 和 ORC : 1. Text 说明:Hive 的默认存储格式。存储方式:行存储。优点…...

工业和自动化领域常见的通信协议

在工业和自动化领域,有多种常见的通信协议,主要用于设备间的通信、数据传输和控制。 Modbus: 类型:串行通信协议用途:广泛用于工业自动化设备间的通信,如PLC、传感器和执行器。优点:简单、开放且…...

连夜爆肝收藏各大云服务新老用户优惠活动入口地址(内含免费试用1个月的地址),适用于小白,大学生,开发者,小企业老板....

具体请前往:云服务器优惠活动入口大全--收藏各主流云厂商的云服务器等系列产品的优惠活动入口,免费试用1个月活动入口,让新老用户都能根据使用场景和身份快速锁定优惠权益 经济下滑,被优化增多,大学生就业难&#xff0…...

SpringBoot+Redis+RabbitMQ完成增删改查

各部分分工职责 RabbitMQ负责添加、修改、删除的异步操作 Redis负责数据的缓存 RabbitMQ里面角色职责简单描述 RabbitMQ里面有几个角色要先分清以及他们的对应关系: 交换机、队列、路由键 交换机和队列是一对多 队列和路由键是多对多 然后就是消息的发送者&…...

【系统集成中级】线上直播平台开发项目质量管理案例分析

【系统集成中级】线上直播平台开发项目质量管理案例分析 一、案例二、小林在项目质量管理中存在的问题(一)计划阶段缺失(二)测试用例编制与执行问题(三)质量管理流程问题(四)质量保证…...

浪潮信息领航边缘计算,推动AI与各行业深度融合

在9月20日于安徽盛大召开的浪潮信息边缘计算合作伙伴大会上,浪潮信息指出,未来的计算领域将全面融入AI技术,特别是在企业边缘侧,智能应用特别是生成式人工智能应用正在迅速普及,这一趋势正引领边缘计算向边缘智算的方向…...

Koa2项目实战3 (koa-body,用于处理 HTTP 请求中的请求体)

以用户注册接口为例,需要在请求里携带2个参数:用户名(user_name)和密码(password)。 开发者需要在接口端,解析出user_name 、password。 在使用Koa开发的接口中,如何解析出请求携带…...

复盘20241012

1、 classpath "com.android.tools.build:gradle:8.5.1" 的版本 与distributionUrlhttps\://services.gradle.org/distributions/gradle-8.9-bin.zip的对应规则: Execution failed for task :app:compileDebugKotlin. 解决方案 切换 setting --> ot…...

泊松流负载均衡控制

目录 泊松流负载均衡控制 一、到达率λ 二、服务率μ 三、泊松流负载均衡控制 泊松流负载均衡控制 在探讨泊松流负载均衡控制时,我们主要关注的是到达率λ和服务率μ这两个核心参数。以下是对这两个参数及其在泊松流负载均衡控制中作用的详细解释: 一、到达率λ 定义:…...

3D打印矫形器市场报告:未来几年年复合增长率CAGR为10.8%

3D 打印矫形器是指使用 3D 打印技术制作的定制外部支撑装置。它们有助于稳定、引导、缓解或纠正肌肉骨骼状况,并根据个体患者的解剖结构进行设计,通常使用 3D 扫描和建模技术。3D 打印在矫形器方面的主要优势是能够生产精确适合患者解剖结构的定制装置&a…...

Richtek立锜科技线性稳压器 (LDO) 选型

一、什么是LDO? LDO也可称为低压差线性稳压器,适合从较高的输入电压转换成较低输出电压的应用,这种应用的功率消耗通常不是很大,尤其适用于要求低杂讯、低电流和输入、输出电压差很小的应用环境。 二、LDO的特性 LDO透过控制线性区调整管…...

Leetcode 前 k 个高频元素

使用最小堆算法来解决这道题目:相当于有一个容量固定为K的教室,只能容纳 K 个人,学生们逐个逐个进入该教室,当教室容量达到K人之后,每次进入一个新的学生后,我们将分数最低的学生(类似本题中的频率最低元素…...

[LeetCode] 面试题01.02 判定是否互为字符重拍

题目描述: 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 示例 1: 输入: s1 "abc", s2 "bca" 输出: true 示例 2&am…...

数据结构-4.5.KMP算法(旧版上)-朴素模式匹配算法的优化

朴素模式匹配算法最坏的情况: 一.实例: 第一轮匹配失败,开始下一轮的匹配: 不断的操作,最终匹配成功: 如上述图片所述,朴素模式匹配算法会导致时间开销增加, 优化思路:主…...

STM32 QSPI接口驱动GD/W25Qxx配置简要

STM32 QSPI接口GD/W25Qxx配置简要 📝本篇会具体涉及介绍Winbond(华邦)和GD(兆易创新) NOR flash相关型号指令差异。由于网络上可以搜索到很多相关QSPI相关知识内容,不对QSPI通讯协议做深度解析。 🔖首先确保所使用的ST…...

UCI-HAR数据集深度剖析:训练仿真与可视化解读

在本篇文章中,我们将深入探讨如何使用Python对UCI人类活动识别(HAR)数据集进行分割和预处理,以及运用模型网络CNN对数据集进行训练仿真和可视化解读。 一、UCI-HAR数据集分析及介绍 UCI-HAR数据集是一个公开的数据集&#xff0c…...

牛客SQL练习详解 06:综合练习

牛客SQL练习详解 06:综合练习 SQL34 统计复旦用户8月练题情况SQL35 浙大不同难度题目的正确率SQL39 21年8月份练题总数 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧! SQL34 统…...

k8s apiserver高可用方案

目前官方推荐有 2 种方式部署k8s apiserver 高可用 keepalived and haproxy 部署有2种方式,一种是systemd管理的,另一种是pod形式,使用那种可以根据实际情况选择 服务部署 systemd方式 可以通过包管理工具安装,正常启动之后&…...