当前位置: 首页 > news >正文

从认识String类,到走进String类的世界

作为一个常用的数据类型,跟随小编一同进入String的学习吧,领略String的一些用法。
在这里插入图片描述

1. 认识 String 类

2. 了解 String 类的基本用法

3. 熟练掌握 String 类的常见操作

4. 认识字符串常量池
5. 认识 StringBuffer 和 StringBuilder

一:认识String类
1.概念:String是编程语言中表示字符串的数据类型。字符串是由零个或多个字符组成的有限序列,通常用于表示文本。
2.表示方法:在大多数编程语言中,字符串使用双引号(")括起来,如"hello"就是一个字符串。
例如:如下相关题目
字符串相加
二:了解 String 类的基本用法

1.获取字符串信息

length():返回字符串的长度。
charAt(int index):返回指定索引处的字符。
isEmpty():判断字符串是否为空。

2.字符串转换

toLowerCase():将字符串中的所有字符转换为小写。
toUpperCase():将字符串中的所有字符转换为大写。
trim():返回字符串的副本,忽略前导空白和尾部空白。

3.字符串比较

equals(Object obj):比较字符串的内容是否相同。
equalsIgnoreCase(String anotherString):与equals方法类似,但忽略大小写。
compareTo(String anotherString):比较两个字符串的大小。

4.字符串截取

substring(int beginIndex):返回一个新的字符串,它是此字符串从beginIndex开始截取到字符串结尾的一个子字符串。
substring(int beginIndex, int endIndex):返回一个新的字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

5.字符串判断

endsWith(String suffix):测试此字符串是否以指定的后缀结束。
startsWith(String prefix):测试此字符串是否以指定的前缀开始。
contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true。

6.字符串索引

indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引。

7.字符串拼接

使用+运算符或append()方法可以将多个字符串拼接在一起。
三:熟练掌握 String 类的常见操作

public class StringDemo {  public static void main(String[] args) {  String str1 = "HelloWorld";  String str2 = "";  // 获取字符串长度  System.out.println(str1.length());  // 获取指定索引处的字符  System.out.println(str1.charAt(0));  // 判断字符串是否为空  System.out.println(str1.isEmpty());  System.out.println(str2.isEmpty());  // 字符串转换  str2 = str1.toUpperCase();  System.out.println(str2);  str2 = str2.toLowerCase();  System.out.println(str2);  // 字符串比较  System.out.println(str1.equals(str2));  System.out.println(str1.equalsIgnoreCase(str2));  // 字符串截取  System.out.println(str1.substring(2));  System.out.println(str1.substring(1, 3));  // 字符串判断  System.out.println(str1.endsWith("rld"));  System.out.println(str1.startsWith("He"));  System.out.println(str1.contains("wor"));  // 字符串索引  System.out.println(str1.indexOf("wo"));  System.out.println(str1.lastIndexOf("o"));  // 字符串拼接  String str3 = str1 + "abc";  System.out.println(str3);  }  
}

注意:final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。

四:认识字符串常量池
常量池:为了提高性能和减少内存消耗,Java等语言引入了字符串常量池。相同内容的字符串在常量池中只存储一份,不同变量可以引用同一份字符串。
字符串常量池的优点:
1.减少内存占用:通过重用字符串对象,避免了重复创建相同的字符串对象,从而减少了内存占用。
2.提高性能:由于减少了字符串对象的创建和销毁操作,因此提高了程序的性能。

// 示例1  
String s1 = "abc";  
String s2 = "abc";  
System.out.println(s1 == s2); // 输出:true  // 示例2  
String s3 = new String("abc");  
String s4 = new String("abc");  
System.out.println(s3 == s4); // 输出:false  // 示例3  
String s5 = new String("abc");  
String s6 = "abc";  
System.out.println(s5 == s6); // 输出:false  // 示例4  
String s7 = new String("abc").intern();  
String s8 = "abc";  
System.out.println(s7 == s8); // 输出:true

示例1:由于s1和s2都是通过字面量方式创建的字符串,且内容相同,因此它们指向的是同一个字符串对象在常量池中的引用。
示例2:s3和s4都是通过new关键字创建的字符串对象,它们在堆中分别占有一个独立的空间,因此s3和s4不相等。
示例3:s5是通过new关键字创建的字符串对象,在堆中占有一个独立的空间;而s6是通过字面量方式创建的字符串,指向的是常量池中的字符串对象。因此s5和s6不相等。
示例4:s7首先通过new关键字在堆中创建了一个字符串对象,然后通过intern()方法将该字符串对象加入到常量池中,并返回常量池中该字符串的引用。由于s8是通过字面量方式创建的字符串,指向的是常量池中的字符串对象,因此s7和s8相等。

五:认识 StringBuffer 和 StringBuilder
StringBuilder和StringBuffer都是Java中用于创建和操作可变字符串的类,它们提供了比String类更高效的字符串操作方法,特别是在需要频繁修改字符串内容的情况下。
StringBuilder

  • 1.概述:

1.1 StringBuilder是Java中的一个类,属于java.lang包。
1.2 它用于创建可变的字符序列,即可以对其内容进行添加、删除、替换等操作而不会创建新的对象。

  • 2.特点:

2.1 可变性:StringBuilder对象是可变的,修改操作不会创建新的对象。
2.2 性能:由于不会频繁创建新的对象,StringBuilder在进行大量字符串拼接或修改操作时性能较高。
2.3 线程不安全:StringBuilder是非线程安全的,即不支持多线程环境下的并发操作,但在单线程环境中效率较高。

  • 3.构造方法:

3.1 无参构造方法:创建一个初始容量为16的StringBuilder对象。
3.2 指定初始容量的构造方法:创建一个具有指定初始容量的StringBuilder对象。
3.3 通过字符串初始化的构造方法:使用指定字符串初始化StringBuilder对象。

  • 4.常用方法:

append():追加字符串到当前StringBuilder对象的末尾。
insert():在指定位置插入字符串。
delete():删除指定范围内的字符。
deleteCharAt():删除指定位置的字符。
replace():替换指定范围内的字符。
reverse():将字符序列进行反转。
setCharAt():修改指定位置的字符。
substring():返回指定范围内的子字符串。
capacity():返回当前StringBuilder对象的容量。
length():返回当前StringBuilder对象的长度(字符数)。
ensureCapacity():确保StringBuilder具有最小的容量。
trimToSize():调整StringBuilder的容量使其等于字符序列的长度。

  • 5.底层原理:

5.1 StringBuilder内部使用可变字符数组(在JDK 9及以后版本中使用字节数组,但逻辑上仍视为字符数组)存储字符序列。
5.2 当进行字符串操作时,如追加、插入或删除字符,StringBuilder会相应地调整其内部数组的大小和内容。
StringBuffer

  • 1.概述:

1.1 StringBuffer也是Java中的一个类,同样属于java.lang包。
1.2 它与StringBuilder类似,都用于创建可变的字符序列。

  • 2.特点:

2.1 可变性:StringBuffer对象也是可变的。
2.2 性能:StringBuffer在进行大量字符串拼接或修改操作时性能也较高,但由于其线程安全的特性,相对于StringBuilder可能会有一定的性能开销。
2.3 线程安全:StringBuffer是线程安全的,即支持多线程环境下的并发操作。

  • 3.构造方法:

3.1 StringBuffer的构造方法与StringBuilder类似,包括无参构造方法、指定初始容量的构造方法和通过字符串初始化的构造方法。

  • 4.常用方法:

4.1 StringBuffer的常用方法与StringBuilder几乎相同,包括append()、insert()、delete()
deleteCharAt()、replace()、reverse()、setCharAt()、substring()等。
4.2 需要注意的是,由于StringBuffer是线程安全的,因此其方法实现中包含了同步机制(使用synchronized关键字),以确保在多线程环境下的正确性。

  • 5.使用场景:

5.1 当需要在多线程环境中安全地操作字符串时,应使用StringBuffer。
5.2 在单线程环境中,如果不需要线程安全的特性,为了获得更高的性能,建议使StringBuilder。

StringBuilder和StringBuffer都是Java中用于创建和操作可变字符串的类,它们提供了丰富的字符串操作方法。在选择使用哪个类时,应根据具体的应用场景和需求来决定。如果需要线程安全的特性,则选择StringBuffer;如果不需要线程安全的特性且追求更高的性能,则选StringBuilder。

>在面试中也频繁被问到,比如:String、StringBuff和StringBulider之间的区别

1.String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
2.StringBuffer与StringBuilder大部分功能是相似的
3.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

在这里插入图片描述

相关文章:

从认识String类,到走进String类的世界

作为一个常用的数据类型,跟随小编一同进入String的学习吧,领略String的一些用法。 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 StringBuffer 和 StringBuilder 一:…...

Vue入门-指令修饰符-@keyup.enter

指令修饰符&#xff1a; 通过"."指明一些指令后缀&#xff0c;不同后缀封装了不同的处理操作 ->简化代码 ①按键修饰符 keyup.enter ->键盘回车监听 ".enter"if(e.keyenter){} //".enter"用来简化代码 demo&#xff1a; <!DOCTYPE…...

【Kubernetes】常见面试题汇总(五十九)

目录 129.问题&#xff1a;pod 使用 PV 后&#xff0c;无法访问其内容&#xff1f; 130.查看节点状态失败&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xf…...

【ARM Linux驱动开发】嵌入式ARM Linux驱动开发基本步骤

【ARM Linux驱动开发】嵌入式ARM Linux驱动开发基本步骤 文章目录 开发环境驱动开发&#xff08;以字符设备为例&#xff09;安装驱动应用程序开发附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 开发环境 首先需要交叉编译器和Linux环境…...

SpinalHDL之设计错误(Design Errors)(一)

本文作为SpinalHDL学习笔记第七十四篇,介绍SpinalHDL的设计错误。 目录: 1.赋值覆盖(Assignment Overlap) 2.跨时钟域违例(Clock crossing violation) 3.组合环(Combinatorial loop) 4.层次违例(Hierarchy violation) 5.IO包 ⼀、赋值覆盖(Assignment Overlap) ⼀、简介…...

QT + opengl 让2d贴图动起来

1 qtopengl 实现纹理贴图&#xff0c;平移旋转&#xff0c;绘制三角形&#xff0c;方形-CSDN博客 在上篇文章里面我已经学会了给贴图&#xff0c;并且旋转&#xff0c;那我们如何动态的显示2D的图片呢&#xff0c;那我们在qt里面是如何实现呢&#xff0c;定时器连续更新。 上…...

【selenium】webdriver测试脚本

【背景】 不同电脑上运行selenium时总是因为环境问题出幺蛾子&#xff0c;所以需要一个最简单的脚本每次先验证一下能不能正常启用selenium。 【脚本】 这个脚本做的事情就是试着用selenium启动网页&#xff0c;默认用了百度首页&#xff0c;也可以根据情况自己修改。 from…...

工业自动化中的关键信号:开关量、模拟量与脉冲量

工业自动化和控制系统中&#xff0c;信号的类型对于数据处理和决策至关重要。主要的信号类型包括开关量、模拟量和脉冲量。每种信号类型都有其独特的特点和应用场景&#xff0c;它们共同构成了自动化系统的基础。这三种信号的特点、应用及其在现代工业自动化中的重要性。 开关…...

VMware vCenter Server 8.0U3c 发布下载,修复 U3b 更新停止响应的问题

VMware vCenter Server 8.0U3c 发布下载 - 集中式管理 vSphere 环境 Server Management Software | vCenter 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vcenter-8-u3/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VMw…...

Java面试宝典-Java集合02

目录 Java面试宝典-Java集合02 21、TreeMap 和 TreeSet 在排序时如何比较元素&#xff1f; 22、ArrayList 和 LinkedList 的区别是什么&#xff1f; 23、ArrayList 和 Vector 的区别&#xff1f; 24、队列和栈是什么&#xff1f;有什么区别&#xff1f; 25、Queue和Deque的区别…...

HJ212-2017协议详解:工业物联网环境监测标准简单了解

在工业物联网&#xff08;IIoT&#xff09;领域&#xff0c;环境数据的采集、传输和分析对于环境监控和治理至关重要。中国环境监测系统中&#xff0c;HJ212-2017协议是针对污染源在线监控&#xff08;监测&#xff09;系统的通信协议标准。该协议规定了污染源自动监控设备与数…...

【Golang】Go语言Seeker接口与文件断点续传实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

【MySQL】基本查询(下):更新、删除

3.Update 语法&#xff1a; UPDATE table_name SET column expr [, column expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]举几个例子&#xff1a; 将孙悟空同学的数学成绩变更为 80 分&#xff1a; 将曹孟德同学的数学成绩变更为 60 分&#xff0c;语文成绩变更为 …...

django urlconf路由分发

在Django中&#xff0c;URLconf&#xff08;URL configuration&#xff09;是用来定义应用程序的URL路由规则的&#xff0c;主要用于将特定的URL请求映射到相应的视图函数。以下是关于Django中URL分发的详细介绍和代码示例。 URLconf的基本结构 URL配置文件&#xff08;urls.p…...

The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

在知乎内查看 题目 思路来源 题解 首先特判n1的情况&#xff0c;其实也不用问 分治&#xff0c;假设当前解决到[l,r]&#xff0c;要递归的vector是x&#xff0c; 维护两个vector L、R&#xff0c;代表下一步要在[l,mid]和[mid1,r]分治的vector 每次将x random_shuffle后&a…...

TensorFlow与Pytorch的转换——1简单线性回归

import numpy as np# 生成随机数据 # 生成随机数据 x_train np.random.rand(100000).astype(np.float32) y_train 0.5 * x_train 2 import tensorflow as tf# 定义模型 W tf.Variable(tf.random.normal([1])) b tf.Variable(tf.zeros([1])) y W * x_train b # 定义损失函…...

短剧小程序短剧APP在线追剧APP网剧推广分销微短剧小剧场小程序集师知识付费集师短剧小程序集师小剧场小程序集师在线追剧小程序源码

一、产品简介功能介绍 集师专属搭建您的独有短剧/追剧/小剧场小程序或APP平台 二、短剧软件私域运营解决方案 针对短剧类小程序的运营&#xff0c;以下提出10条具体的方案&#xff1a; 明确定位与目标用户&#xff1a; 对短剧类小程序进行明确定位&#xff0c;了解目标用户群体…...

AI与物理学的交汇:Hinton与Hopfield获诺贝尔物理学奖

诺贝尔物理学奖颁给了AI&#xff01;机器学习先驱Hinton与Hopfield联手获奖&#xff0c;出乎所有人的意料。 今年的诺贝尔物理学奖颁给了机器学习领域的两位先驱&#xff0c;杰弗里辛顿&#xff08;Geoffrey Hinton&#xff09;和约翰霍普菲尔德&#xff08;John Hopfield&…...

六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询

本文基于六西格玛设计方法论&#xff0c;对消费级无人机的设计流程进行系统化研究&#xff0c;探讨如何通过六西格玛设计的理念、工具和方法提升无人机产品的设计质量和市场竞争力。文章从市场定位、客户需求分析出发&#xff0c;深入到关键KPI指标的制定&#xff0c;并逐步阐述…...

按分类调用标签 调用指定分类下的TAG

按分类调用标签 调用指定分类下的TAG <?php query_posts(category_namenews); if (have_posts()) : while (have_posts()) : the_post(); if( get_the_tag_list() ){ echo $posttags get_the_tag_list(<li class"jquery">,</li><li>,</li…...

深度解析Real-ESRGAN:6B轻量模型实现专业级图像超分辨率

深度解析Real-ESRGAN&#xff1a;6B轻量模型实现专业级图像超分辨率 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN Real-ESRGAN_…...

【人工智能核心技术详解】7 深度神经网络正则化技术体系_贝叶斯视角下的统一理论

深度神经网络正则化技术体系:贝叶斯视角下的统一理论手册 文章架构总览 #mermaid-svg-lhtjBcaOxIDdpUDM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes …...

【佛山大学主办,土木与交通学院承办 | 施普林格Springer系列出版 | EI、Scopus检索 | 另期刊论文征稿】第九届结构工程与工业建筑国际学术会议(ICSEIA 2026)

第九届结构工程与工业建筑国际学术会议&#xff08;ICSEIA 2026&#xff09; 2026 9th International Conference on Structural Engineering and Industrial Architecture 2026年7月3-5日 中国佛山 大会官网&#xff1a;www.icseia.com【论文投稿】 截稿时间&#xff1a;…...

别再让脚本报错了!按键精灵CBool、CStr、CInt等6种类型转换函数保姆级教程

按键精灵类型转换实战指南&#xff1a;从报错到精通的六种武器 在自动化脚本开发的世界里&#xff0c;按键精灵就像一位不知疲倦的数字助手&#xff0c;能够代替我们完成各种重复性操作。但这位助手有时也会闹脾气——当你从网页抓取的数据需要计算时&#xff0c;当界面读取的…...

量子变分算法优化:ADAPT-VQE与ASC协同技术解析

1. 量子变分算法优化背景与挑战 量子变分特征求解器&#xff08;VQE&#xff09;作为当前量子计算化学模拟的核心算法&#xff0c;其核心思想是通过参数化量子电路&#xff08;PQC&#xff09;制备试探波函数&#xff0c;并利用经典优化器调整参数以逼近目标哈密顿量的基态能量…...

函数依赖的核心概念解析[数据库原理]

函数依赖的定义与核心概念 函数依赖&#xff08;Functional Dependency&#xff0c;简称FD&#xff09;是关系数据库理论中用于描述属性间数据约束的核心概念。它定义了一个关系模式&#xff08;Relation Schema&#xff09;中&#xff0c;一个属性&#xff08;或属性组&#…...

避坑指南:在CentOS 7上部署泛微Ecology9 OA,我踩过的那些“内存不足”和“防火墙”的坑

CentOS 7部署泛微Ecology9 OA系统&#xff1a;从内存优化到防火墙配置的深度避坑指南 在Linux环境下部署企业级OA系统从来都不是一件简单的事情&#xff0c;尤其是像泛微Ecology9这样功能复杂的大型系统。表面上看&#xff0c;官方文档和网络上的教程似乎已经提供了完整的步骤&…...

手把手教你用Wireshark(或类似工具)理解AMBA AXI总线上的数据流(以Cortex-A53为例)

实战解析&#xff1a;用Wireshark透视Cortex-A53的AXI总线数据流 在嵌入式系统开发中&#xff0c;AXI总线如同SoC的神经系统&#xff0c;承载着处理器核心与各功能模块间的关键通信。对于底层驱动工程师和FPGA开发者而言&#xff0c;能够直观观察总线上的数据流动&#xff0c;就…...

仅限内部团队使用的Perplexity航班缓存穿透防护策略——含Redis布隆过滤器+航班时刻表TTL动态算法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity航班信息查询 Perplexity 是一款以实时网络检索与引用驱动为特色的 AI 智能问答工具&#xff0c;其在航空旅行场景中可高效辅助用户获取最新、最准确的航班动态。不同于传统静态知识库模型&a…...

缠论分析工具终极指南:如何在通达信中实现可视化技术分析

缠论分析工具终极指南&#xff1a;如何在通达信中实现可视化技术分析 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 还在为复杂的缠论分析而头疼吗&#xff1f;想要在通达信软件中轻松识别分型、笔、线…...