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

split 分割字符串方法解析,substring 截取字符串方法解析;二者的作用和区别?使用时需要注意什么?

目录

一. 摘要

二. split 方法

2.1 String[] split(String regix)

2.2 String[] split(String regix,int limit)

2.3.1 当 int < 0时,会按照最大数量切割字符串

2.3.2 当 int = 0时,此时就和第一个方法一样了,等于没有传入值

2.3.3 当 int > 0时,会按照实际传入的值切割字符串数量

三. substring 方法

3.1 String substring(int beginIndex)

3.2 String substring(int beginIndex,int endIndex)


一. 摘要

众所周知,开发过程中,我们时常会遇到需要切割字符串或截取字符串的需求,例如按照特殊符号切割、或按照标点符号截取等。

对于切割字符串方法和截取字符串方法,Java为我们提供了 split 切割方法,substring 截取方法,下面小编就来说说二者的用法和区别。

二. split 方法

2.1 String[] split(String regix)

此方法只传递一个 String 字符串参数,就是想按照什么字符串来进行切割,方法返回一个字符串数组。

此外最最最重要的一点!!!

我们都知道一个 "\" 是代表转义,但小编在测试的过程中发现,有一些特殊的符号时不能使用一个转义符号的转义,甚至还会编译报错。例如 "+","*"这两个运算符;"^" 使用一个转义符转义时程序不报错但得到的结果是错误的,但如果使用双斜线去进行转移则是正常的。

这一点小编也觉得很奇妙。

总之总结就是:

(1)"\\" 双斜线转义符几乎可以正确转义所有的特殊字符,目前没有遇到不能被双斜线转义的,且转义切割后输出结果均正常;

(2)"\" 可以转义部分特殊字符,但有一些不能转义成功且会编译报错,使用 "\\" 即可避免此问题;

(3)一些简单字符例如 "," 和 "!" 即使不使用转义符也能正常得到结果;

(4)如果要做切割字符串操作,建议使用 "\\" 进行转义,可以兼容转义几乎所有字符串;

这里小编将测试代码放到下面,喜欢探究的小伙伴们可以粘贴测试一下哦!

public static void main(String[] args) { String str1 = "IDEA,MySQL,Redis,Docker,SpringBoot,Nacos,kafka,RabbitMQ,"; String str2 = "IDEA、MySQL、Redis、Docker、SpringBoot、Nacos、kafka、RabbitMQ、"; String str3 = "IDEA.MySQL.Redis.Docker.SpringBoot.Nacos.kafka.RabbitMQ."; String str4 = "IDEA。MySQL。Redis。Docker。SpringBoot。Nacos。kafka。RabbitMQ。"; String str5 = "IDEA!MySQL!Redis!Docker!SpringBoot!Nacos!kafka!RabbitMQ!"; String str6 = "IDEA?MySQL?Redis?Docker?SpringBoot?Nacos?kafka?RabbitMQ?"; String str7 = "IDEA|MySQL|Redis|Docker|SpringBoot|Nacos|kafka|RabbitMQ|"; String str8 = "IDEA(MySQL(Redis(Docker(SpringBoot(Nacos(kafka(RabbitMQ("; String str9 = "IDEA)MySQL)Redis)Docker)SpringBoot)Nacos)kafka)RabbitMQ)"; String str10 = "IDEA@MySQL@Redis@Docker@SpringBoot@Nacos@kafka@RabbitMQ@"; String str11 = "IDEA#MySQL#Redis#Docker#SpringBoot#Nacos#kafka#RabbitMQ#"; String str12 = "IDEA$MySQL$Redis$Docker$SpringBoot$Nacos$kafka$RabbitMQ$"; String str13 = "IDEA%MySQL%Redis%Docker%SpringBoot%Nacos%kafka%RabbitMQ%"; String str14 = "IDEA^MySQL^Redis^Docker^SpringBoot^Nacos^kafka^RabbitMQ^"; String str15 = "IDEA&MySQL&Redis&Docker&SpringBoot&Nacos&kafka&RabbitMQ&"; String str16 = "IDEA*MySQL*Redis*Docker*SpringBoot*Nacos*kafka*RabbitMQ*"; String str17 = "IDEA+MySQL+Redis+Docker+SpringBoot+Nacos+kafka+RabbitMQ+"; String str18 = "IDEA-MySQL-Redis-Docker-SpringBoot-Nacos-kafka-RabbitMQ-"; String str19 = "IDEA/MySQL/Redis/Docker/SpringBoot/Nacos/kafka/RabbitMQ"; String str20 = "IDEA'MySQL'Redis'Docker'SpringBoot'Nacos'kafka'RabbitMQ'"; // 双斜线 "\\" 转义特殊符号 String strArray[] = str20.split("\\'"); int num = 0; for (String s : strArray) { System.out.println("数组"+ num +"索引值: "+ s); num++; } System.out.println("-----------------"); System.out.println("数组长度: "+ strArray.length); }

那么我就直接运行上面的那个示例代码吧,使用 str20,使用单引号作为切割符号;

运行即可得到如下结果,可以看到字符串已经被成功切割为8个字符串,因为数组从 0 索引开始,所以 7 索引处即为第八个字符串。

2.2 String[] split(String regix,int limit)

此方法需要传递两个参数,第一个参数一上面的方法一样都需要传递一个切割字符串,第二个参数则是传入一个 int 类型的值。

小编使用JDK8和JDK11均进行了测试,发现 int 类型共分为以下三种情况;

2.3.1 当 int < 0时,会按照最大数量切割字符串

这种情况当分隔符作为末尾尤为明显,分隔符后面的也会作为一个空字符串

如下运行图所示,可以看到 8 索引处为空字符串,但是使用第一个方法时就只切割出来8个字符串吗,int < 0之后切割出来9个字符串;

2.3.2 当 int = 0时,此时就和第一个方法一样了,等于没有传入值

因为 int 默认值就是0嘛,若分隔符结尾则分隔符后面的不会再作为一个空字符串,方法只会切割出来8个字符串;

如下图所示,没有打印数组8索引值

2.3.3 当 int > 0时,会按照实际传入的值切割字符串数量

(1)直接看下图,当 int = 1时,那不就等于没切割嘛,直接输出字符串

(2)当 int = 2 时,则只会切割出两个字符串,第一个字符串正常切割,后面的字符串作为一个整体,如下图所示

(3)而当 int 值大于最大可切割字符串数量时,会按照 int < 0的规则来进行切割,即分隔符结尾则分隔符后面也作为一个空字符串,我们现在知道最多可以切割出来9个字符串,那么现在出传入一个20,如下所示,方法不会报错,而是会按最大数量来进行切割;

三. substring 方法

3.1 String substring(int beginIndex)

该方法返回一个字符串,方法传入一个 int 类型参数,表示从字符串第X索引处开始截取,一直截取到字符串最后一位。(注意String字符串索引从0开始)

并且传入的 int 类型值必须为有效值,如果 int < 0 或者 int > 最大索引值,则会直接抛出异常;

public static void main(String[] args) { String str = "0123456789"; String str1 = str.substring(3); System.out.println(str1); }

运行上述代码,如下即可得到正确结果

3.2 String substring(int beginIndex,int endIndex)

substring 方法也可以传入两个参数,即从哪一处索引开始截取,到哪一索引处结束截取;

该方法的截取效果类似于我们数学上学的左闭右开区间,即 "[3,7)",有数学印象的小伙伴们应该能看到。

简单来说就是,从第几位截取,会把当前索引处的字符也截取下来,到第几位索引处结束,则不会截取结束索引处的字符,而是截取到它的前一位。

如下图所示,我从索引3截取,到索引7结束,可以看到运行结果中3被截取下来了而7却没有。

http://www.jsqmd.com/news/851506/

相关文章:

  • Photoshop图层批量导出终极指南:告别手动导出,效率提升10倍!
  • 5个必须掌握的 EVM 业务逻辑漏洞:Tornado Cash 治理接管案例分析 [特殊字符]
  • 2026年选中医学习中介?靠谱机构全知道! - GrowthUME
  • 手把手教你调参:用scikit-image的threshold_local优化扫描效果,告别模糊和噪点
  • RisingLight入门指南:快速搭建你的第一个OLAP数据库系统
  • 3分钟快速上手:HTML转Figma的终极免费工具指南
  • 告别重复劳动!用AutoHotKey一键搞定Python环境导入(附完整脚本)
  • Markdown-to-image Web编辑器部署指南:一键Vercel部署打造专属在线海报制作平台
  • xiaozhi-esp32 里配置 OTA URL 的位置是
  • 别再折腾环境了!手把手教你用Docker镜像5分钟搞定NeRF Studio(附避坑指南)
  • 5分钟精通APK Installer:Windows上安装Android应用的完整方案
  • 从零打造可落地的直流电机 PID 驱动系统:硬件设计 + 算法实现 + 仿真验证全流程
  • XMly-Downloader-Qt5:解锁喜马拉雅音频自由之旅
  • LM317电源模块的“隐藏参数”与实战避坑:为什么你的空载电压总是不稳?
  • 保姆级教程:安装PyTorch后,用这4个方法彻底验证GPU加速是否真的生效
  • 电池内阻测试全解析:DCIR与EIS原理、测试与应用实战
  • 如何快速创建一个轻量美观的导航站?Typecho + MijiNav组合轻松完成
  • MacBook Pro用户必装!iStatistica Pro保姆级设置指南:从菜单栏监控到Sonoma小组件
  • CANN asc-devkit Select函数
  • 深入TI毫米波雷达数据流:从ADC采样到点云输出的代码级解析(以IWR6843AOP Out of Box Demo为例)
  • 从科学视角,如何理解和研究涌现——寻规律,探法则,溯本源|郑志刚
  • m4s-converter完整指南:快速将B站缓存视频转换为MP4格式
  • 采购必备的30+常用术语大全
  • 告别Midjourney订阅费?试试这款免费开源的Fooocus,本地部署就能玩转AI绘画
  • 保姆级教程:用Python和ROS控制越疆Dobot机械臂完成第一个抓取任务(附完整代码)
  • 从零打造可落地的直流电机 PID 驱动系统 (二):增加蓝牙远程控制功能
  • CANN/asc-devkit指数函数API文档
  • MIT Cheetah-Software编译手记:搞定Qt5.10.0路径、LCM依赖与那些诡异的C++报错
  • 两百元预算玩转OpenHarmony标准系统:低成本开发板硬件选型与驱动开发实战
  • 如何用BilibiliDown轻松下载B站视频:新手完整指南