Java:String类(超详解!)

一.常用方法

🥏1.字符串构造

字符串构造有三种方法:

📌注意: 

1. String是引用类型,内部并不存储字符串本身

如果String是一个引用那么s1和s3应该指向同一个内容,s1和s2是相等的,应该输出两个"hello world",但是如果不是一个引用应该还会再输出一个"hello world"

2. 在Java中""引起来的也是String类型对象。

 

🥏2.字符串的比较 

1. "==" 比较

📌注意:

对于内置类型(基本数据类型),==比较的是变量中的值;

对于引用类型==比较的是引用中的地址。

 在这张图中我们已经实现"=="的引用比较

而这时我们发现,s1 和 s2  的值是相等的,那么对于字符串来说我们是否能够按内容来比较呢?下面我们就来看一看吧!

2.equals()比较

📌比较方法:按照字典序比较:字符大小的顺序

我们发现我们的的确确的打印了"hello world"。

但是在之前我们其实也使用过equals方法去比较其他的对象,但是如果我们想要去比较内容,我们必须重写equals方法, 否则比较的结果就是不相等的。

但是为什么,我们并没有重写equals方法就去比较字符串,却能得到相等, 这是因为String默认重写了equals方法

 3.compareTo()比较

📌比较方法:按照字典序比较

📌注意:与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。

  1.  先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
  2.  如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值

 

4.compareToIgnoreCase()比较

这个方法和compareTo方法并没有什么区别,compareToIgnoreCase方法只是在compareTo方法的基础上忽略大小写。

🥏3.字符串查找 

1.charAt(int index)方法

功能:

返回index位置上字符,如果index为负数或者越界,抛出 IndexOutOfBoundsException异常

2.indexOf()方法

📌indexOf(int ch)方法

功能: 返回ch第一次出现的位置,没有返回-1

 📌indexOf(int ch, int fromIndex)方法

功能:从fromIndex位置开始找ch第一次出现的位置,没有返回-1

 📌indexOf(String str)方法

功能:返回str第一次出现的位置,没有返回-1

📌indexOf(String str, int fromIndex)方法 

功能:从fromIndex位置开始找str第一次出现的位置,没有返回-1

📌 lastIndexOf(int ch)方法

功能:从后往前找,返回ch第一次出现的位置,没有返回-1

📌 lastIndexOf(int ch, int fromIndex)

功能:从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返 回-1

📌 lastIndexOf(String str)

功能:从后往前找,返回str第一次出现的位置,没有返回-1

📌lastIndexOf(String str, int fromIndex

功能:从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

🥏4.转化

1.数值和字符串转化

📌 数值转换成字符串

📌将字符串转换成数值

 

2.大小写转换

3.字符串转数组

📌字符串和字符数组转换

 📌字符串和字节数组转换

 

4.格式化

🥏5. 字符串替换

1.replace

将oldChar字符替换成newChar字符

2.replaceFirst 

将首个旧字符串替换成新字符串 

 3.replaceAll

将所有旧字符串替换成新字符串 

注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串

🥏6.字符串拆分

我们利用split可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。 

📌String[] split(String regex)

功能:将字符串全部拆分

 📌String[] split(String regex, int limit)

功能:将字符串以指定的格式,拆分为limit组

注意事项:

1. 如果以字符"|","*","+"都得加上转义字符,前面加上"\\".

如果不使用转义字符就会发生错误

使用转义字符后 

2. 而如果是"\",那么就得写成"\\\\".

对于"\",使用转义字符时需要用到"\\\":三个'\'

3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符. 

 🥏7.字符串截取

我们可以使substring方法从一个完整的字符串之中截取出一部分内容

1.substring(int beginIndex)方法

功能:从指定索引截取到结尾

2.substring(int beginIndex, int endIndex) 方法

功能:截取部分内容(左闭右开)

🥏8.删除字符串左右空白字符(空格, 换行, 制表符等)

1.trim()方法

🥏9. 字符串的不可变性

String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改,是因为:

1. String类在设计时就是不可改变的,String类实现描述中已经说明了

注意:String类中的字符实际保存在内部维护的value字符数组中(被final修饰) 

我们现在看这段代码:arr数组同样被final修饰,但是我们还是能修改他的值,这就不符合他的不可变性了

那么这就代表了value被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。 

📌 所以说所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

🥏10.字符串修改

如果我们想要在原字符串上进行添加我们该怎么办呢?来看下面的这段代码

我们发现成功的在原字符串上添加了字符串" world",但是这样的效率其实是非常低下我们应该尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象

那么我们该怎么办呢,这时就要用到我们的StringBuilder和StringBuffer。

二.StringBuilder和StringBuffer

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法。

如果大家想要了解更多可以去这里了解Overview (Java Platform SE 8 )

🥏1. append(String str)

这就是我们刚才要说的添加的方法,这个方法是用于在字符串的尾部添加,相当于刚才看到的‘+=’,下面就让我们来看一下他的使用吧

当然我们不是一定只能追加字符串我们还可以追加很多的类型:可以追加:boolean、char、char[]、 double、float、int、long、Object、String、StringBuff的变量 。

🥏2.insert(int offset, String str)

功能:在指定位置插入

 

他所插入的类型跟append方法是一样的: boolean、char、char[]、 double、float、int、long、Object、String、StringBuff的变量 。

🥏3.删除字符

📌deleteCharAt(int index) 

功能:删除指定位置字符

 📌delete(int start, int end)

功能:删除指定范围的字符(左闭右开)

🥏4.replace(int start, int end, String str)

功能: 见某位置到某位置的字符串替换(左闭右开)

🥏5.reverse()

功能: 反转字符串

除此之外还有一些需要注意的事项:

String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

  • String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
  • StringBuilder变为String: 调用toString()方法。 

好了今天的内容就分享到这里了我们下一篇见! 记得点赞收藏加关注

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Django框架开发企业级Web应用

💖 博客主页:瑕疵的CSDN主页 💻 Gitee主页:瑕疵的gitee主页 🚀 文章专栏:《热点资讯》 使用Django框架开发企业级Web应用 1 引言 2 Django简介 3 安装Python与Django 4 创建Django项目 5 设计应用结构 6 创…

行业首发|美格智能创新推出5G+Wi-Fi 7智能终端解决方案,端侧AI助力数智升维

在数字化时代的生产生活过程中,特殊场景下的通信需求愈发重要。高速、灵活、稳定的通信保障能够进一步提升生产生活的效率。随着5G网络的高速发展,一方面,其凭借低时延、高带宽、高可靠性和大规模连接的特性让移动终端的网络连接实现跨越式升…

UML总结

零:学习链接 UML_哔哩哔哩_bilibili 一:UML概述 二:类图 类图(Class Diagram)是统一建模语言(UML)中一种重要的图形表示,用于描述系统中的类及其之间的关系。它是面向对象设计中常…

基于SSM+微信小程序考试的管理系统(考试1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序考试的管理系统实现了管理员及用户。 1、管理员功能有个人中心,用户管理,考试资料管理,用户交流管理,试卷管理&#xff…

大数据日志处理框架ELK方案

介绍应用场景大数据ELK日志框架安装部署 一,介绍 大数据日志处理框架ELK(Elasticsearch、Logstash、Kibana)是一套完整的日志集中处理方案,以下是对其的详细介绍: 一、Elasticsearch(ES) 基本…

ZEISS ATOS Q蓝光三维扫描仪高效把控零件质量检测【上海沪敖3D】

位于Bengaluru的施耐德电气工厂拥有一流的计量设备,可以检测所有供应商的零件。当时,他们在使用一款激光扫描设备进行质量检测,但是,该设备不便于携带,且检测时需要喷涂大量的显影液。此外,它需要被安装在夹…

LeetCode--买卖股票的最佳时机Ⅲ--动态规划

一、题目解析 二、算法原理 这道题跟另外的几道股票问题分析方式相似,区别主要就在于该题规定我们最多可以完成两笔交易,那么我们就可以定义二维数组f[][],g[][]。f[i][j]表示在第i天后我们手中持有股票且交易次数为j时的最大利润&#xff0c…

微服务之网关、网关路由、网关登录校验

简介:来源:SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 认识网关 前端请求不能直接访问微服务,而是要请求网关: 网关可以做…

JetBrains IDE中GPU进程(JCEF)重启问题(Too many restarts of GPU-process)解决方案

目录 前言1. GPU进程重启问题概述1.1 什么是GPU进程重启问题?1.2 该问题带来的影响 2. GPU进程重启问题的原因分析2.1 显卡驱动的兼容性问题2.2 系统资源的限制2.3 JCEF组件的设置不合理 3. 解决方案3.1 方法一:通过自定义属性禁用GPU加速3.2 方法二&…

CRC校验 生成多项式选取奇次偶次的问题讨论

目录 问题一:为什么CRC校验码不支持偶次校验码? 问题二:如何判断一个生成多项式是否为偶次多项式? 步骤: 示例: 注意: 问题三:CRC32的生成多项式是什么?是偶次还是…

Python自动打开本地谷歌浏览器—无需下载驱动器(模板—自己的笔记)

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、完整1:自动打开本地谷歌浏览器5、使用Selenium连接到远程调试端口总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博…

电气安全隐患不容忽视

在现代生活中,电力如同血液般滋养着城市的每一个角落,然而,当这股能量失控时,它也能瞬间化身为吞噬生命的火焰。根据国家消防局的权威数据,电气火灾占所有火灾的28.4%,而其中6.5%的源头直指短路——这一看似…

WebSocket—双向实时通信

WebSocket 是一种用于建立客户端和服务器之间的全双工通信协议。它允许在同一连接上进行双向数据传输,特别适合实时性要求高的应用场景,如即时聊天、实时通知和在线游戏等。WebSocket 使用 HTTP 握手建立连接,一旦连接建立,数据可…

014:数据恢复软件iCare Data Recovery安装教程

摘要:本文详细介绍数据恢复软件iCare Data Recovery安装流程。 一、软件介绍 iCare Data Recovery Pro是一款专业且高效的数据恢复软件,专为解决各种数据丢失问题而设计。该软件具备强大的扫描和恢复功能,能够深入查找并恢复包括文档、图片、…

【移动应用开发】Android持久化技术

目录 一、实现一个“我的图书馆” 1. 用户登陆界面 1.1 运行截图 1.2 源代码 ① 布局文件activity_login.xml ② res/values/strings.xml ③ LoginActivity.kt ④ 在AndroidManifest.xml注册LoginActivity.kt 2. 图书信息数据库和显示界面 2.1 功能实现截图 2.2 源…

商用加密机:信息安全的重要保障

在当今这个数字化时代,信息的安全传输和存储成为了各行各业不可忽视的重要问题。随着网络技术的迅猛发展,各种数据泄露、网络攻击事件层出不穷,信息安全威胁日益严峻。为了应对这一挑战,商用加密机作为一种重要的信息安全设备&…

Vxe UI vue vxe-table 表格中使用下拉表格,单元格渲染下拉表格

Vxe UI vue vxe-table 表格中使用下拉表格,单元格渲染下拉表格 单元格中渲染下拉表格,需要使用到 vxe-table-select 这个组件,在 vxe-table 4.7 中使用非常简单,只需要配置好渲染器数据源就可以。 支持单选 也可以多选 代码 …

.NET Core WebApi第5讲:接口传参实现、数据获取流程、204状态码问题

一、接口传参实现 1、引入:通过网址上两个参数mod...和FID....,区分开要的是哪个板块里面的数据​​​​​ 2、传参实现:在方法的参数处定义STRING字符串 (1)传1个参数 2>运行代码,在网页上输入以“点…

深度了解flink 运行时架构

前言 Flink 架构 Flink是目前算是实时计算的事实标准,背靠Apache活跃的社区和国内阿里技术团队的支持,社区生态十分丰富,本篇文章主要介绍flink的结构,对flink的各个组件有个更清晰的认识。 flink官网对flink的架构有很清晰的介…

企业后端系统通用模版

一、前言 随着科技越来越发达,现在项目的主流技术也基本定型了,前后端分离为主(vue+springboot)。而后端现在仍有很多重复代码工作的部分,本着减轻程序员编写重复代码,做到快速开发,所以设计了一个通用的后端系统。 项目地址:ywz-manage: 游王子og管理系统通用模版 二…