Java:String类(超详解!)

news2024/11/30 10:33:20

一.常用方法

🥏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.coloradmin.cn/o/2225919.html

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

相关文章

《深度学习》模型的部署、web框架 服务端及客户端案例

目录 一、模型的部署 1、模型部署的定义与目的 1)定义 2)目的 2、模型部署的步骤 1)导出模型 2) 部署模型 3)测试模型 4)监控模型 3、模型部署的方式 1)云端部署 2)嵌入…

autMan奥特曼机器人-对接Docker版本NTQQ详细教程

准备 1、准备一台服务器,amd64/arm64都可以,配置最好还是2核保底吧。 2、准备一个VNC软件。1Remote:点此下载 3、准备手机登陆机器人QQ号,扫码 NTQQ相关 NTQQ一键脚本(适用于小白支持autMan/无界) 复制以…

linux标准 I/O

FILE 指针标准输入、标准输出和标准错误检查或复位状态I/O 缓冲控制文件 I/O 内核缓冲的标志直接 I/O:绕过内核缓冲stdio 缓冲 FILE 指针 FILE 是一个结构体数据类型,它包含了标准 I/O 库函数为管理文件所需要的所有信息,包括用于实际I/O 的…

基于Spring Boot的宿舍管理系统设计与实现(源码+定制+开发)宿舍信息管理平台、智能宿舍系统开发、学生宿舍管理平台设计、宿舍入住与信息管理

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

单节点kubernetes-1.20二进制部署

文章目录 一, 集群拓扑二,架构图三,前置准备1.环境准备1.1操作系统初始化配置(1)关闭防火墙(2)关闭selinux(3)关闭swap(4)根据规划设置主机名(5&a…

[简易版] 自动化脚本

前言 uniapp cli项目中没办法自动化打开微信开发者工具,需要手动打开比较繁琐,故此自动化脚本就诞生啦~ 实现 const spawn require("cross-spawn"); const chalk require("picocolors"); const dayjs require("dayjs&quo…

实战教程:利用Docker容器化技术部署Szurubooru图像分享平台

实战教程:利用Docker容器化技术部署Szurubooru图像分享平台 一、Szurubooru介绍1.1 Szurubooru简介1.2 主要特点1.3 主要使用场景 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker comp…

numpy——索引切片

一、索引和切片 import numpy as npx np.arange(48).reshape(6, 8) print(x)# 选取第二行 print(x[1]) #从0开始,取得第2行# 选取第二行, 第二列 print(x[1][1])# 选取第三行到最后一行, 第一列到最后一列 print(x[2:,2:])# 花式索引 (1, 1) 和 (4, 4) print(&quo…

MPP音视频总结

基础篇 1.常用图像格式介绍 常用图像像素格式 RGB 和 YUV。 1.1RGB RGB分类通常指的是将图像或颜色按照RGB(红、绿、蓝)颜色空间进行分组或分类。RGB图像格式通常包括RGB24(RGB888)、RGB32、RGBA、RGB565等。 RGB24是一种常用…

【CSS】入门详解

你是否曾经浏览网页时,被一些网站精美的布局、炫酷的动画和赏心悦目的色彩所吸引?这背后神奇的力量就是 CSS(层叠样式表)。CSS 就像网页的化妆师,它负责网页的样式和布局,让原本枯燥的 HTML 结构变得生动有…

AttributeError: module ‘pandas‘ has no attribute ‘datetime‘

今天在进行时间序列问题处理时候,发生如下报错: AttributeError: module pandas has no attribute datetime 因为在新的pands版本中pandas已不再支持datetime模块。 from datetime import datetime 需要导入datetime库。 原代码: impor…

2025选题|基于Hadoop的物品租赁系统的设计与实现

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,…

《虚拟现实的边界:探索虚拟世界的未来可能》

内容概要 在虚拟现实(VR)技术的浪潮中,我们见证了其从实验室的奇想逐渐走向日常生活的非凡旅程。技术发展的背后是不断突破的创新,早期的设备虽然笨重,但如今却趋向精致、轻巧,用户体验显著提升。想象一下…

【MySQL】视图特性 用户管理

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是视图,我们又该如何管理用户。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…

旧衣物回收小程序开发,线上线下相结合

当下,绿色发展是重中之重,旧衣回收作为一件利国利民的模式,在发展中深受大众欢迎。随着大众生活水平的提高,家中闲置的衣物逐年增加,这也为旧衣回收市场发展提供了广阔的发展前景,为入局者和创业者提供新的…

keepalived+web 实现双机热备

环境:利用keeplived实现web服务器的双机热备(高可用) 注意: (1) 利用keeplivedweb做双击热备(高可用),最少需要两台服务器,可以实现多域名对应一个VIP,并且访问不同域名,显示不同主页&#xf…

a50股指期货是什么意思?

首先,股指期货,顾名思义,就是以股票指数为标的的期货合约。啥是期货呢?简单来说,就是现在约定好价格,将来某个时间再交易的东西。而A50股指期货,就是以A50指数为标的的期货合约。 A50指数&…

理解UUID 无序性对数据存储的影响

文章目录 背景问题1,移动数据问题2,频繁的页分裂背景 如果以UUID为主键,对于mysql 可能存在的问题。 问题1,移动数据 从上图来看,如果UUID是随机的话,以0012,0021 这个节点来说,如果插入的是0015,相当于要把16到21的数据向后移动一个位置,如果是自增的话,只会在尾…

HarmonyOS ArkTS与C++数据类型转换

1. HarmonyOS ArkTS与C数据类型转换 本文介绍了C与TS各自数据类型与互相之间的数据类型转换,在需要使用C模块时可以快速上手对各种数据类型进行转换。 1.1. 概述 HarmonyOS的主力开发语言是ArkTS,也提供了C语言的支持,对于一些能力&#xff…

Docker:容器

Docker:容器 容器容器命令docker psdocker createdocker startdocker rundocker logsdocker execdocker stopdocker restartdocekr rmdocker killdocker pausedocker unpausedocker commitdocker cpdocker diffdocker exportdocker importdocker renamedocker stats…