String类详解

前言:String类是表示字符串的类,String类的内部也提供了非常多的方法来供程序员使用。

String类还有一大特性,就是不可变性。只要使用string创建了字符串,就不可以修改。为string类提供了一层安全性。(对于" "引起来的也为String类型对象)

字符串不可变性

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

由图可知道,String类的字符由value数组所进行维护,无法修改。所有涉及到可能修改字符串内容的都是创立一个新的对象,改变的是新对象,原有的字符串无法改变,如我们使用replace方法:

可以看到,这个替换只是创建了新的对象,并没有真正的改变。如果真要改变字符串,可以直接这样:

可以看见,直接修改确实可以看到改变了,但实际上String类是不可修改的,所有的修改都会创立新的对象,这样修改的效率非常低下(用此方法的修改会在中间创建许多临时变量,占用内存和时间)要想字符串可变,可以使用StringBuffer和StringBuilder(下面会讲)

字符串常用功能方法

1.字符串构造

有着三种方法进行构造,原理是String的形参为字符数组(s1为s2的简化形式):

s1,s2,s3为引用变量,存于栈区,字符串存于堆区:

2.String对象比较

(1)==比较

对于内置类型,==比较的是值,对于引用类型,==比较的是地址

(2)equals比较

对于String类,它自己也重写了equals方法,也有特定的比较形式:

总结上图,字符串比较方式是先检测anObject是否为String类型的对象,然后再检测字符串长度是否相同,然后再一个接着一个字符的检测。

(3)compareTo方法

1.int compareTo(String s)

该方法按照字典序进行比较,(不忽略大小写),先按照次序一个个进行比较,发现不对等的字符返回ascll码差值;如果前面所有字符都相等,但是其中一个字符串比另外一个要长,则返回这俩个字符串长度差值。

2.int compareTolgnoreCase(String str)

与compareTo不同的是,它忽略大小写的比较:

3.字符串查找(charAt、indexOf、lastIndexOf)

如图:

以上的位置均为下标,除了第一个返回字符,其他都是返回int类型

演示:

4.类型转化

注意:只要涉及到String类型的转换,都不是在原有的字符串改变,而是创建一个新的字符串来改变。

(1)数字转化字符串(valueOf)

格式:String.valueOf(...)

可以看到,它支持这么多的类型转化为字符串。

需要注意的是,该方法是使用String类来引用的,所以它是一个静态方法

(2)字符串转化数字(Integer.parseInt、Double.parseDouble)

格式:需要用到包装类来引用

(3)大小写转换(toUpperCase、toLowerCase)

1.小写转大写:String toUpperCsae()

2.大写转小写:String toLowerCase()

(4)字符串转化数组(toCharArray)

格式:char[] toCharArray()

(5)数组转化字符串(new)

直接new一个String类型对象即可。

5.字符串替换

(1)replace:替换所有指定字符

格式:String replace(char oldchar, char newchar)

(2)replace:替换所有指定字符串

格式:String replace(String oldchar, String newchar)

(3)replaceAll:替换所有指定字符串(支持正则表达式)

格式:String replaceAll(String regex, String replacement)

(4)replaceFirst:替换首个指定字符串(支持正则表达式)

格式:String replaceAll(String regex, String replaceFirst)

6.字符串拆分

(1)split:字符串全部拆分

格式:String[] split(String regex)

(2)split:字符串以指定的形式拆分成指定组

格式:String[] split(String regex,int limit)

注意事项:

1.拆分字符为" | " " * " " + " '' . ''时都得加上转义字符,前面加上" \\ "

2.如果是" \\ ",前面就加上'' \\\ ''

3.如果一个字符串要用多个分割符,则可以用" | "为连字符

示例1:

示例2(多次拆分):

7.字符串截取

(1)substring:从指定位置截取到结尾

格式:String substring(int beginlndex)

(2)substring:截取[beginlndex,endlndex)以内的内容(部分)

格式:String substring (int beginlndex,int endlndex)

8.字符串去空格(trim)

格式:String trim()

去掉的是前后的空格

9.字符串的length方法

区别于数组的length,字符串的length后面要加括号:(如:s.length()

StringBuilder和Stringbuffer类

对于String类的不可变性,java又多提供了俩种类来解决这个问题,方便字符串进行修改。StringBuilder和StringBuffer这俩大类,他们大部分功能是相同的,都有一个append方法来修改着字符串。所以以后写代码时用的字符串需要修改时,用这俩大类来定义字符串。

区别性

StringBuffer比StringBuilder多了一个transient关键字,在多线程情况下,Buffer能够保证线程的安全,但是一般单线程情况下,只用StringBuilder即可。

重要功能

append方法:

用于拼接字符串和字符,还可以追加各种类型的变量,如图:

格式:StringBuff append(String str)

还会有许多StringBuilder和Stringbuffer类的各种方法,这里就不介绍了。

制作不易,麻烦给个赞鼓励一下!

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

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

相关文章

macOS上编译android的ffmpeg及ffmpeg.c

1 前言 前段时间介绍过使用xcode和qt creator编译调试ffmepg.c,运行平台是在macOS上,本文拟介绍下android平台如何用NDK编译链编译ffmepg库并使用。 macOS上使用qt creator编译调试ffmpeg.c macOS上将ffmpeg.c编译成Framework 大体思路: 其…

Android Context 详解

一、什么是Context? Context是一个抽象基类。在翻译为上下文,是提供一些程序的运行环境基础信息。 Context下有两个子类,ContextWrapper是上下文功能的封装类(起到方法传递的作用,主要实现还是ContextImpl&#xff0…

万字长文详解QUIC协议,为什么有了TCP我们还需要QUIC?

本文目录 1.前言2. HTTP缺点缺点一:建立连接的握手延迟大缺点二:多路复用的队首阻塞缺点三:TCP协议的更新滞后 3.TCP缺点3.QUIC优点一:避免队首阻塞的多路复用优点二:支持连接迁移优点三:可插拔的拥塞控制优…

【OceanBase诊断调优】—— obdiag 工具助力OceanBase数据库诊断调优(DBA 从入门到实践第八期)

1. 前言 昨天给大家分享了【DBA从入门到实践】第八期:OceanBase数据库诊断调优、认证体系和用户实践 中obdiag的部分,今天将其中的内容以博客的形式给大家展开一下,方便大家阅读。 2. 正文 在介绍敏捷诊断工具之前,先说说OceanBa…

VMware虚拟机安装Ubuntu-Server版教程(超详细)

目录 1. 下载2. 安装 VMware3. 安装 Ubuntu3.1 新建虚拟机3.2 安装操作系统 4. SSH方式连接操作系统4.1 好用的SSH工具下载:4.2 测试SSH连接 5. 开启root用户登录5.1 设置root用户密码5.2 传统方式切换root用户5.3 直接用root用户登录5.4 SSH启用root用户登录 6. 安…

FANUC机器人保养服务包,高效又可靠!

发那科机器人作为工业生产中的重要设备,其保养工作至关重要。定期FANUC机械手保养不仅可以延长机器人的使用寿命,还能提高生产效率和质量。 法那科机器人保养步骤: 基本的法兰克机器人保养是维护机器人的第一步,正确的保养步骤还…

Rainbond 携手 TOPIAM 打造企业级云原生身份管控新体验

TOPIAM 企业数字身份管控平台, 是一个开源的IDaas/IAM平台、用于管理账号、权限、身份认证、应用访问,帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS 系统的所有身份,实现一个账号打通所有应用的服务。 传统企业 IT 采用烟囱…

Redis用GEO实现附近的人功能

文章目录 ☃️概述☃️命令演示☃️API将数据库表中的数据导入到redis中去☃️实现附近功能 ☃️概述 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。…

木馒头头戴式蓝牙耳机

这里写目录标题 木馒头二代头戴式蓝牙耳机清除连接记忆 木馒头二代头戴式蓝牙耳机清除连接记忆 在配对模式下,同时按住播放和暂停按钮4秒,LED闪烁紫色3次,即为清除成功。

HTML动态响应2-Servlet+Ajax实现HTTP前后台交互方式

作者:私语茶馆 前言 其他涉及到的参考章节: HTML动态响应1—Ajax动态处理服务端响应-CSDN博客 Web应用JSON解析—FastJson1.2.83/Tomcat/IDEA解析案例-CSDN博客 HTML拆分与共享方式——多HTML组合技术-CSDN博客 1.场景: WEb项目经常需要前后端交互数据,并动态修改HTML页…

OSError: [Errno 117] Structure needs cleaning

一 问题描述 OSError: [Errno 117] Structure needs cleaning: /tmp/pymp-wafeatri 我重新使用SSH登录也会提示这个类似问题 二 解决方法 2.1 尝试删除报错的文件 (想直接看最终解决方法的可忽略此处) sudo rm -rf /tmp/pymp-wafeatri 此种方法只能保证…

【linux-imx6ull-设备树点灯】

目录 1. 设备树简介1.1 编译-引用1.2 设备树文件结构1.3 设备树节点介绍1.3.1 特殊节点chosen 1.4 节点内容追加 2. 设备树常用OF操作函数2.1 节点寻找类2.2 属性提取类2.3 其它常用类 4. 设备树下LED实验4.1 实验简介4.2 添加LED设备节点4.3 获取设备节点并提取属性4.3.1 获取…

内网渗透-隧道搭建ssp隧道代理工具

内网渗透-隧道搭建&ssp隧道代理工具 目录 内网渗透-隧道搭建&ssp隧道代理工具spp隧道代理工具spp工作原理图cs上线主机spp代理通信服务端配置客户端配置CS配置设置CS生成木马的监听器配置CS监听上线的监听器生成木马 spp隧道搭建服务端配置客户端配置CS配置 内网穿透&a…

【机器学习300问】100、怎么理解卷积神经网络CNN中的池化操作?

一、什么是池化? 卷积神经网络(CNN)中的池化(Pooling)操作是一种下采样技术,其目的是减少数据的空间维度(宽度和高度),同时保持最重要的特征并降低计算复杂度。池化操作不…

【吊打面试官系列】Java高并发篇 - 什么是乐观锁和悲观锁?

大家好,我是锋哥。今天分享关于 【什么是乐观锁和悲观锁?】面试题,希望对大家有帮助; 什么是乐观锁和悲观锁? 1、乐观锁: 就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态, 乐观锁认为竞争…

手拉手springboot整合kafka发送消息

环境介绍技术栈springbootmybatis-plusmysqlrocketmq软件版本mysql8IDEAIntelliJ IDEA 2022.2.1JDK17Spring Boot3.1.7kafka2.13-3.7.0 创建topic时,若不指定topic的分区(Partition主题分区数)数量使,则默认为1个分区(partition) springboot加入依赖kafk…

【深度学习基础】使用Pytorch搭建DNN深度神经网络与手写数字识别

目录 写在开头 一、DNN的搭建 问题描述与数据集 神经网络搭建 模型训练 模型评估 模型复用 二、手写数字识别 任务描述 数据集 神经网络搭建 模型训练 模型评估 写在最后 写在开头 本文将介绍如何使用PyTorch框架搭建深度神经网络模型。实现模型的搭建、模…

Ps系统教程03

选区工具的组合使用 先用魔棒将大致区域点击圈主 会发现一些零散的小区域 使用套索工具进行区域的加减(按住shift/alt键进行相关区域加减) 可以放大查看 基本处理完细节之后 如果把不用的填充背景直接按delete删除,那么原版图案就会…

【贪心算法题目练习】

1. 分发饼干 这道题目和我们之前讲到的田忌赛马的问题很相似,只不过这这里不需要劣等马去抵消掉优等马,直接上贪心策略: 先将两个数组排序。针对胃口较小的孩子,从小到大挑选饼干: i. 如果当前饼干能满足,直接喂(最小…

大语言模型实战——最小化模型评测

1. 引言 现在国内外的主流模型,在新模型发布时都会给出很多评测数据,用以说明当前模型在不同数据集上的测评表现(如下面llama3发布的评测数据)。 这些评测数据是如何给出来的呢?这篇文章会用一个最小化的流程来还原下…