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类的各种方法,这里就不介绍了。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 11.0 系统设置语言和输入法菜单Launage语言列表增加支持多种英语语言功能

1.前言 在11.0的系统ROM产品定制化开发中,在系统中的语言和输入法菜单中,在添加语言的默认列表中对于同一类型的语言就可以会出现一中语言,比如多种英语类型 就显示的不全,所以要求显示所有的英语类型,这样就需要了解语言列表的加载流程然后加载所有的英语类型,接下来具…

Qt 5桌面APP开发实战

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 第一节:Qt 5桌面APP开发实战入门 Qt 5的跨平台特性 Qt 5的界面设计工具 Qt 5的…

硬盘重新分区后数据丢失,如何高效恢复?

在数字化时代,硬盘作为我们存储重要数据的“仓库”,承载着工作文件、家庭照片、视频资料等众多不可替代的信息。然而,有时因为误操作或系统需要,我们可能会对硬盘进行重新分区,结果却发现宝贵的数据不见了。面对这种情…

vue3学习(五)

前言 接上一篇笔记,继续Router路由相关入门知识学习,笔记与code示例,分享学习,大佬请忽略。 一、Router路由入门知识点 入门知识点就这些,其他心法可以去官网继续深造。 二、code示例 按照前面分享的“webstorm新建v…

虚拟现实环境下的远程教育和智能评估系统(五)

查阅相关VR眼动注意力联合教育学相关论文 1.Exploring Eye Gaze Visualization Techniques for Identifying Distracted Students in Educational VR(IEEE VR 2020) 摘要:我们提出了一种架构,使VR教学代理能够响应眼动追踪监控…

【C#】类和对象的区别

1.区别概述 结构体和类的最大区别是在存储空间上,前者是值类型,后者是引用类型,它们在赋值上有很大的区别,在类中指向同一块空间的两个类的值会随一个类的改变而改变另一个,请看如下代码所示: namespace …

数据结构:排序(1)【冒泡排序】【插入排序】【堆排序】【希尔排序】

一.冒泡排序 冒泡排序实际上就是这样: 1.冒泡排序的实现 两个数进行比较,大的往后移动。对于排序这个专题来说,这是比较简单的一种排序了: void Swap(int* a, int* b) {int tmp *a;*a *b;*b tmp; } void BubbleSort1(int* …

Amazon云计算AWS(二)

目录 三、简单存储服务S3(一)S3的基本概念和操作(二)S3的数据一致性模型(三)S3的安全措施 四、非关系型数据库服务SimpleDB和DynamoDB(一)非关系型数据库与传统关系数据库的比较&…

Elasticsearch 认证模拟题 -2

一、题目 有一个索引 task3,其中有 fielda,fieldb,fieldc,fielde 现要求对 task3 重建索引,重建后的索引新增一个字段 fieldg 其值是fielda,fieldb,fieldc,fielde 的值拼接而成。 …

基于JSP的高校二手交易平台

开发语言:Java 数据库:MySQL 技术:JSP技术 工具:浏览器(如360浏览器、谷歌浏览器、QQ浏览器等)、MySQL数据库 系统展示 系统功能界面 用户注册与登录界面 个人中心界面 商品信息界面 摘要 本文研究了高…

Go 优雅的爬虫框架 - Colly

Colly 是一款用 Go 语言编写的优雅网络爬虫框架,速度快、灵活且易于使用 关键特性包括: 线程安全。用户友好的 API。支持 XHR(Ajax)和 WebSocket。缓存和持久化。支持速度限制和分布式爬取。强大的可扩展性。colly采集器配置 AllowedDomains: 设置收集器使用的域白名单,设…

TrueNAS开启SSH登录ROOT

简介: 从 SCALE Bluefin 22.12.0 开始,为了加强安全性并遵守联邦信息处理标准 (FIPS),root帐户登录已被弃用。所有 TrueNAS 用户都应创建具有所有必需权限的本地管理员帐户,并开始使用它来访问 TrueNAS。当根用户密码被禁用时,只有管理用户帐户才能登录 TrueNAS Web 界面。…

深入剖析 Kubernetes 原生 Sidecar 容器

1 Sidecar 容器的概念 sidecar 容器的概念在 Kubernetes 早期就已经存在。一个明显的例子就是 2015 年的这篇 Kubernetes 博客文章,其中提到了 sidecar 模式。多年来,sidecar 模式在应用程序中变得越来越普遍,使用场景也变得更加多样化。 其…

大语言模型拆解——Tokenizer

1. 认识Tokenizer 1.1 为什么要有tokenizer? 计算机是无法理解人类语言的,它只会进行0和1的二进制计算。但是呢,大语言模型就是通过二进制计算,让你感觉计算机理解了人类语言。 举个例子:单1,双2&#x…

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册 环境信息:VMware虚拟软件16.0 首先查看KylinOS服务器版本:nkvers 备注: (Tercel) 版本是 V10 SP1 版本, (Sword) 版本是 V10 SP2 版本, (Lance) 版本是 V10 …

Apache SeaTunnel On SparkEngine 集成CDP

随着数据处理需求的日益增长,选择一个高效、灵活的数据处理工具变得尤为关键。SeaTunnel,作为一个开源的数据集成工具,不仅支持多种数据处理引擎,还提供了丰富的连接器和灵活的数据同步方案。 本文将详细介绍 SeaTunnel 的优势和…

笔记:Windows故障转移集群下的oracle打补丁

以下方法比较暴力,请谨慎使用 1,关闭并禁用故障转移集群的服务,如下 2,关闭故障转移集群中资源的自启动 3,重启服务器 4,手动关闭服务 net stop msdtc net stop winmgmt 5,分别对所有节点打…

公路资产三维实景快速建模技术方案

目录 1. 应用背景点云矢量建模特征提取1. 路面标识线自动提取2. 交通标志牌自动提取3.护栏、路缘石自动提取4.路面矢量高程自动纠正 属性及编码计算1.里程桩号自动计算2.单体化要素自动编码 公路三维实景模型自动化建模 1. 应用背景 随着“数字交通强国”建设的不断深入&#x…

「多客」圈子论坛社区交友系统开源版小程序源码|圈子社区系统

简述 社交圈子论坛系统是一种面向特定人群或特定话题的社交网络,它提供了用户之间交流、分享、讨论的平台。在这个系统中,用户可以创建、加入不同的圈子,圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、点赞等互…

表格中附件的上传及显示#Vue3#后端接口数据

表格中附件的上传及显示#Vue3#后端接口数据 实现效果&#xff1a; 表格中上传附件 代码&#xff1a; <!-- 文件的上传及显示 --> <template><!-- 演示地址 --><div class"dem-add"><!-- Search start --><div class"dem-ti…