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

java :String 类

在我们之前的讲解中我们已经了解了很多的Java知识,这节我们讲Java中字符如何定义以及关于String如何使用还有常见的string函数。

【本节目标】

1. 认识 String 类

2. 了解 String 类的基本用法

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

4. 认识字符串常量池

5. 认识 StringBuffer 和 StringBuilder

1. String类的重要性

在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提 供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字 符串应用又非常广泛,因此Java语言专门提供了String类。 在开发和校招笔试中,字符串也是常客

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

2. 常用方法

2.1 字符串构造

String类提供的构造方式非常多,常用的就以下三种:

其他方法需要用到时,大家参考Java在线文档:Java Platform SE 8

【注意】 1. String是引用类型,内部并不存储字符串本身,在String类的实现源码中,String类实例变量如下:

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

// 打印"hello"字符串(String对象)的长度

System.out.println("hello".length());

2.2 String对象的比较

字符串的比较是常见操作之一,比如:字符串排序。Java中总共提供了4中方式:

1. ==比较是否引用同一个对象

注意:对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址。

2. boolean equals(Object anObject) 方法:按照字典序比较 字典序:字符大小的顺序 String类重写了父类Object中equals方法,Object中equals默认按照==比较,String重写equals方法后,按照 如下规则进行比较,比如: s1.equals(s2)

3. int compareTo(String s) 方法: 按照字典序进行比较 与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式: 1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值 2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值

4. int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较

2.3 字符串查找

字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法:

2.4 转化

1. 数值和字符串转化

2. 大小写换

3. 字符串转数组

2.5 字符串替换

使 用 一 个 指 定的新的字符串替换掉已有的字符串数据,可用的方法如下:

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

2.6 字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。 可用方法如下:

注意事项:

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

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

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

2.7 字符串截取

从一个完整的字符串之中截取出部分内容。可用方法如下:

注意事项:

1. 索引从0开始

2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

2.8 其他操作方法

2.9 字符串的不可变性

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

是因为: 1. String类在设计时就是不可改变的,String类实现描述中已经说明了 以下来自JDK1.8中String类的部分实现:

String类中的字符实际保存在内部维护的value字符数组中,该图还可以看出

1. String类被final修饰,表明该类不能被继承

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

2. 所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象 比如 replace 方法:

【纠正】

网上有些人说:字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。

这种说法是错误的,不是因为String类自身,或者其内部value被final修饰而不能被修改。

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

那如果想要修改字符串中内容,该如何操作呢?

2.10 字符串修改

注意:

尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率 非常低下

但是这种方式不推荐使用,因为其效率非常低,中间创建了好多临时对象。

可以看待在对String类进行修改时,效率是非常慢的,因此:尽量避免对String的直接需要,如果要修改建议尽量 使用StringBuffer或者StringBuilder。

b. 借助StringBuffer 和 StringBuilder

3. StringBuilder和StringBuffer

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

从上述例子可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可 以修改。频繁修改字符串的情况考虑使用StringBuilder。 注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则: String变为StringBuilder: 利用StringBuilder的构造方法或append()方法 StringBuilder变为String: 调用toString()方法。

2.11 创建格式化字符串

我们知道输出格式化数字可以使用 printf() 和 format() 方法。

String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。

String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。

如下所示:

String 类的静态方法 format() :

3.2 面试题:

1. String、StringBuffer、StringBuilder的区别

String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.

StringBuffer与StringBuilder大部分功能是相似的

StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操 作

相关文章:

java :String 类

在我们之前的讲解中我们已经了解了很多的Java知识,这节我们讲Java中字符如何定义以及关于String如何使用还有常见的string函数。 【本节目标】 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 …...

关于非中文或者url文本不换行的问题

我在一个写一个简单的url展示的时候,发现url一直溢出不换行,查了各种方法不管用,我请教了我大哥,他直接甩给我两个css放进去就好了 word-break:break-all; 按字符截断换行 /* 支持IE和chrome,FF不支持*/ word-w…...

LeetCode 热题 100之矩阵

1.矩阵置0 思路分析:使用标记数组 记录需要置为 0 的行和列:使用两个布尔数组 zeroRows 和 zeroCols 来记录需要置为 0 的行和列两次遍历 第一遍遍历整个矩阵,找到所有为0的元素,并更新zeroRows和zeroCols;第二遍遍历…...

YOlO系列——yolo v3

文章目录 一、算法原理二、网络结构三、正负样本匹配规则四、损失函数五、边框预测六、性能特点七、应用场景 YOLO-v3(You Only Look Once version 3)是一种先进的目标检测算法,属于YOLO系列算法的第三代版本。以下是对YOLO-v3的详细介绍&…...

基于Datawhale开源量化投资学习指南(11):LightGBM在量化选股中的优化与实战

1. 概述 在前几篇文章中,我们初步探讨了如何通过LightGBM模型进行量化选股,并进行了一些简单的特征工程和模型训练。在这一篇文章中,我们将进一步深入,通过优化超参数和实现交叉验证来提高模型的效果,并最终通过回测分…...

Python4

4. 更多控制流工具 除了刚介绍的 while 语句&#xff0c;Python 还用了一些别的。我们将在本章中遇到它们。 4.1. if 语句 if elif else if x<0: x 0 print(Negative changed to zero) elif x0: print( zero) else: print(More) 4.2. for 语句 Pyth…...

springboot系列--web相关知识探索六

一、前言 web相关知识探索五中研究了请求中所带的参数是如何映射到接口参数中的&#xff0c;也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索五中主要研究自定义对象参数数据绑定底层原理。本次…...

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误 测试环境1、 MYODBC 3.51.18 or higher2、分析和解决2.1 解决1&#xff0c;降级MySQL ODBC2.2 解决2&#xff0c;修改FreeSWITCH代码 测试环境 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密…...

阿里云物联网的通信方式

阿里云物联网通信的两种方式&#xff0c;一个是物模型&#xff08;分为服务&#xff0c;事件&#xff0c;属性&#xff09;&#xff0c;一个是自定义topic&#xff08;要另外设置数据流转&#xff09; 1.使用产品内的功能定义&#xff0c;&#xff08;其实也就是Topic中定义好的…...

自由职业者的一天:作为小游戏开发者的真实工作日记

大家好&#xff0c;我是小蜗牛。 在这个快节奏的数字时代&#xff0c;自由职业者的生活往往充满了挑战与机遇。作为一名微信小游戏开发者&#xff0c;我的日常工作并不像人们想象中的那样充满光鲜亮丽的画面&#xff0c;而是由无数的编码、调试和创意碰撞组成的。今天&#xf…...

【RL Latest Tech】分层强化学习:Option-Critic架构算法

&#x1f4e2;本篇文章是博主强化学习RL领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在&#x1f…...

分布式数据库

前言 分布式数据库系统&#xff08;‌DDBS&#xff09;包含分布式数据库管理系统&#xff08;‌DDBMS&#xff09;和分布式数据库&#xff08;DDB&#xff09;。在分布式数据库系统中&#xff0c;一个应用程序可以对数据库进行透明操作&#xff0c;数据库中的数据分别在不同的…...

MySQL(2)【库的操作】

阅读导航 引言一、创建数据库1. 基本语法2. 创建数据库案例&#x1f4cc;创建名为db1的数据库&#x1f4cc;创建一个使用utf8字符集的db2数据库&#x1f4cc;创建一个使用utf8字符集&#xff0c;并带校对规则的db3数据库 二、字符集和校验规则1. 查看系统默认字符集以及校验规则…...

python pip更换(切换)国内镜像源

国内镜像源列表(个人推荐清华大学的源) ​ 清华大学&#xff1a; https://pypi.tuna.tsinghua.edu.cn/simple阿里云&#xff1a; http://mirrors.aliyun.com/pypi/simple豆瓣&#xff1a; http://pypi.douban.com/simple中国科技大学&#xff1a; https://pypi.mirrors.ustc.e…...

阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f343; vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode&#x1f4ab; Gitee &#x1f…...

使用 BERT 和逻辑回归进行文本分类及示例验证

使用 BERT 和逻辑回归进行文本分类及示例验证 一、引言 在自然语言处理领域中&#xff0c;文本分类是一项至关重要的任务。本文将详细介绍如何结合 BERT 模型与逻辑回归算法来实现文本分类&#xff0c;并通过实际示例进行验证。 二、环境准备 为了运行本文中的代码&#xf…...

【skywalking 】监控 Spring Cloud Gateway 数据

使用Spring Cloud 开发&#xff0c;用Skywalking 监控服务&#xff0c;但是Skywalking 默认是不支持 Spring Cloud Gateway 网关服务的&#xff0c;需要手动将 Gateway 的插件添加到 Skywalking 启动依赖 jar 中。 skywalking相关版本信息 jdk&#xff1a;17skywalking&#x…...

SpringWeb

SpringWeb SpringWeb 概述 SpringWeb 是 spring 框架中的一个模块&#xff0c;基于 Servlet API 构建的 web 框架. springWeb 是 Spring 为 web 层开发提供的一整套完备的解决方案。 在 web 层框架历经 Strust1&#xff0c;WebWork&#xff0c;Strust2 等诸多产品的历代更…...

嵌入式刷题(day21)

MySQL和sqlite的区别 MySQL和SQLite是两种常见的关系型数据库管理系统(RDBMS),但它们在特性、使用场景和架构方面有显著的区别: 1. 架构 MySQL:是一个基于服务器的数据库系统,遵循客户端-服务器架构。MySQL服务器运行在主机上,客户端通过网络连接并发送查询。它可以并…...

OpenAI 下一代旗舰模型现身?奥尔特曼亲自辟谣“猎户座“传闻

在人工智能领域最受瞩目的ChatGPT即将迎来两周岁之际&#xff0c;一场关于OpenAI新旗舰模型的传闻再次引发业界热议。然而&#xff0c;这场喧嚣很快就被OpenAI掌门人奥尔特曼亲自澄清。 事件源于科技媒体The Verge的一则报道。据多位知情人士透露&#xff0c;OpenAI可能会在11…...

Kubernetes 自动扩缩容最佳实践

Kubernetes 自动扩缩容最佳实践 一、前言 哥们&#xff0c;别整那些花里胡哨的。Kubernetes 自动扩缩容是保证应用高可用和成本优化的关键&#xff0c;今天直接上硬货&#xff0c;教你如何配置和优化自动扩缩容。 二、扩缩容类型对比 类型适用场景优势劣势HPA水平扩缩容响应…...

OpenClaw多通道管理:百川2-13B-4bits量化模型同时接入飞书与钉钉

OpenClaw多通道管理&#xff1a;百川2-13B-4bits量化模型同时接入飞书与钉钉 1. 为什么需要多通道管理&#xff1f; 上个月我遇到一个尴尬场景&#xff1a;团队部分成员用飞书沟通&#xff0c;另一部分用钉钉。当我尝试用OpenClaw搭建自动化助手时&#xff0c;不得不在两个平…...

为什么你的Jenkins构建结果不可靠?可能是工作区没清理!

为什么你的Jenkins构建结果不可靠&#xff1f;可能是工作区没清理&#xff01; 在持续集成&#xff08;CI&#xff09;的实践中&#xff0c;Jenkins作为自动化构建的核心工具&#xff0c;其稳定性直接影响着开发团队的交付效率。然而&#xff0c;许多开发者都曾遇到过这样的困惑…...

从清洗到展示:一份完整的微博评论LDA分析Jupyter Notebook实战笔记(附避坑点)

从清洗到展示&#xff1a;一份完整的微博评论LDA分析Jupyter Notebook实战笔记&#xff08;附避坑点&#xff09; 在数据爆炸的时代&#xff0c;社交媒体评论中蕴藏着大量有价值的用户观点。本文将带你用Jupyter Notebook完整走通微博评论的主题分析流程&#xff0c;从原始数据…...

单片机I/O口阻抗特性及其在电路设计中的关键作用

1. 阻抗基础&#xff1a;从水管到电路的理解 第一次接触阻抗概念时&#xff0c;我盯着教科书上的公式发呆了半小时。直到有天修水管时突然开窍——这不就是水管的粗细对水流的影响吗&#xff1f;在电路中&#xff0c;阻抗就是电子流动遇到的"阻力"。但和水管不同&…...

NeoPixel Painter:嵌入式HSV动画的固定点实现

1. NeoPixel Painter 库概述NeoPixel Painter 是一个面向嵌入式 LED 动画开发的轻量级 Arduino 库&#xff0c;专为简化 WS2812B&#xff08;NeoPixel&#xff09;LED 灯带的动态效果编程而设计。它并非对 Adafruit_NeoPixel 库的简单封装&#xff0c;而是构建在其之上的状态驱…...

智能客服原型开发:OpenClaw+Qwen3-32B搭建对话系统

智能客服原型开发&#xff1a;OpenClawQwen3-32B搭建对话系统 1. 为什么选择这个技术栈&#xff1f; 去年我接手了一个智能客服系统的预研项目&#xff0c;客户要求两周内交付可演示的原型。传统方案需要前后端开发、对话引擎集成、工单系统对接&#xff0c;时间根本不够。最…...

BULLM_ExtendMotor:8通道I²C电机驱动Arduino HAL库

1. 项目概述BULLM_ExtendMotor 是专为牛明工作室&#xff08;BULLM Studio&#xff09;8通道电机驱动扩展板设计的嵌入式控制库。该扩展板采用 IC 总线通信&#xff0c;集成 8 路独立可逆直流电机驱动通道&#xff0c;每通道支持 PWM 调速与方向控制&#xff0c;适用于多轴运动…...

Android TTS自定义开发:从0到1打造专属语音引擎

Android TTS自定义开发&#xff1a;从0到1打造专属语音引擎 【免费下载链接】tts-server-android 这是一个Android系统TTS应用&#xff0c;内置微软演示接口&#xff0c;可自定义HTTP请求&#xff0c;可导入其他本地TTS引擎&#xff0c;以及根据中文双引号的简单旁白/对话识别朗…...

AIGC查重率多少合格?看完这篇就清楚了

相信不少用AI辅助写论文的同学都有过这种焦虑&#xff1a;深夜改完终稿&#xff0c;想起学校要求提交AIGC检测报告&#xff0c;翻遍论坛找不到明确的合格标准&#xff0c;手心出汗反复刷新搜索结果&#xff0c;就怕自己的AI生成占比超标过不了审。作为常年跟各类论文查重工具打…...