当前位置: 首页 > 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…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

【AI学习】三、AI算法中的向量

在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...