关于java.lang.String常用方法全解析以及代码单元、码点等的总结思考

发布时间:2026/9/29 6:34:31

关于java.lang.String常用方法全解析以及代码单元、码点等的总结思考
String类的使用频率非常高几乎所有的String API都很有用。代码单元定义字符编码的最小存储单位char charAt(int index):返回指定位置的代码单元。通常来说在java中字母以及一些常用的字符都是一个代码单元的。java在内存中的字符编码是utf16而在源码文件和class文件中编码是utf8。在utf8中一个汉字占3个字节(2万多汉字)或4个字节(5万多汉字)而utf8是网络传输中最通用的字符编码。在utf16中一个汉字占2个字节少数汉字占用4个字节。uft8是可变编码占用1~6字节。一个字节就是一个代码单元。uft16也是可变编码占用2个或者4个字节。两个字节就是一个代码单元。汉字数量太多往往一个代码单元表示不了。我们只考虑java在运行时对汉字的编码因为运行时才是关键即认识到java运行时的编码(也叫作内码)采用的是utf16编码。一个代码单元就是2个字节(16位)。有些生僻字符(比如一些生僻汉字)占用2个代码单元(32位)即4个字节。码点定义一个字符对应的编码可以简单的理解为字符。即**一个码点就是一个字符。**根据上面所说的一个码点可以是1个或2个代码单元组成。2个代码单元组成的字符也称作辅助字符。int codePointAt(int index):返回指定位置的开始的码点。 int offsetByCodePoints(int startIndex, int cpCount):返回从startIndex码点开始cpCount个码点后的码点索引这里有我弄了比较久才理解的东西。什么叫做指定位置、码点索引第二个方法是不是有病啊我都知道初始码点索引和向后推的码点个数了为什么还有这个方法来计算码点索引呢直接做个加法不就好了看一下代码Strings123;可以知道它是4个字符4个码点字符长度是5有5个代码单元。随便说一下java中的字符长度length()就是代码单元长度和我们平常理解的字符个数不是绝对等同的一个东西(虽然大多数是相同的值于是乎变成了一个难以发现的坑)。码点索引如下我们有字符“123”1码点索引02码点索引13码点索引2码点索引3和4可以看到第四个字符(码点)占用了两个码点索引。虽然书上是说叫做码点索引但是理解起来跟寻常思维不一样我个人将指定位置和码点索引理解为代码单元索引(也可能是原版英文译为中文时的错误)。可以说java中任何涉及到字符串位置、索引(比如上面的码点索引)之类的东西一律都视为代码单元索引。其他一些常用的方法intcompareTo(Stringother):按照字典顺序如果字符串位于other之前返回一个负数如果字符串位于other之后返回一个正数如果两个字符串相等返回0IntStreamcodePoints():将这个字符串的码点作为一个流返回。调用toArray将它们放在一个数组中。newString(int[]codePoints,intoffset,intcount):用数组中从offset开始的count个码点构造一个字符串。booleanempty()boleanblank():如果字符串为空或者由空格组成返回true。booleanequals(Objectother):如果字符串和other相等返回true。booleanequalsIgnoreCase(Stringother):如果字符串与other相等(忽略大小写)返回true。booleanstartsWith(Stringprefix)booleanendsWith(Stringsuffix):如果字符串以prefix开头或以suffix或结尾则返回true。(PS:中文原版书籍中多了一个或字)intindexOf(Stringstr)intindexOf(Stringstr,intfromIndex):返回与字符串str或码点cp匹配的第一个子串的开始位置。从索引0或fromIndex开始匹配。如果在原始字符串中不存在str,则返回-1。intlastIndexOf(Stringstr)intlastIndexOf(Stringstr,intfromIndex)intlastIndexOf(Stringcp)intlastIndexOf(intcp)intlastIndexOf(intcp,intfromIndex):返回与字符串str或码点cp匹配的最后一个子串的开始位置。从原始字符串末尾或fromIndex开始匹配。intlength():返回字符串代码单元的个数。intcodePointCount(intstartIndex,intendIndex):返回startIndex和endIndex-1之间的码点个数。Stringreplace(CharSequenceoldString,CharSequencenewString):返回一个新字符串。这个字符串用newString代替原始字符串中所有的oldString。可以用String或StringBuilder对象作为CharSequence参数。Stringsubstring(intbeginIndex)Stringsubstring(intbeginIndex,intendIndex):返回一个新字符串。这个字符串包含原始字符串中从beginIndex到字符串末尾或endIndex-1的所有代码单元。StringtoLowerCase()StringtoUpperCase()返回一个新字符串。这个字符串将原始字符串中的大写字母改为小写字母或者将原始字符串中的所有小写字母改成大写字母。Stringtrim()Stringstrip():返回一个新字符串。这个字符串将删除原始字符串头部和尾部小于等于U0020的字符(trim)或空格(strip)。Stringjoin(CharSequencedelimiter,CharSequence...elements):返回一个新字符串用给定的定界符连接所有元素。Stringrepeat(intcount):返回一个字符串将当前字符串重复count次。注释在API注释中有一些CharSequence类型的参数。这是一种接口类型所有字符串都属于这个接口。欢迎点赞收藏转发。个人网站博客地址朗朗繁星的博客

相关新闻

3分钟掌握BlindWatermark:Java图像隐形水印终极指南

3分钟掌握BlindWatermark:Java图像隐形水印终极指南

2026/9/3 12:47:16

3分钟掌握BlindWatermark:Java图像隐形水印终极指南 【免费下载链接】BlindWatermark Java 盲水印 项目地址: https://gitcode.com/gh_mirrors/blin/BlindWatermark 你是否曾担心自己的原创图片被盗用却无法证明版权?或者需要在图片中嵌入秘密信息…

如何3步完成全网小说高效批量下载?终极指南来了!

如何3步完成全网小说高效批量下载?终极指南来了!

2026/9/4 9:56:04

如何3步完成全网小说高效批量下载?终极指南来了! 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,你是否曾遇到过心爱的小说突然消…

sqlmap自动化漏洞利用(DVWA初、中、高)

sqlmap自动化漏洞利用(DVWA初、中、高)

2026/9/6 11:52:39

前两篇文章我们安装了kali,并在我们物理机中安装靶场DVWA,今天我们来看看如何用kali自带的工具sqlmap进行SQL注入漏洞利用。 一、环境配备 1.我们先在我们kali中打开DVWA,打开方式为http://[DVWA所在主机IP]/DVWA,例如DVWA所在主机…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/28 16:01:49

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/28 16:01:48

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/28 16:01:48

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…