当前位置: 首页 > 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却没有。

相关文章:

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

目录 一. 摘要 二. split 方法 2.1 String[] split(String regix) 2.2 String[] split(String regix&#xff0c;int limit) 2.3.1 当 int < 0时&#xff0c;会按照最大数量切割字符串 2.3.2 当 int 0时&#xff0c;此时就和第一个方法一样了&#xff0c;等于没有传入…...

HTTP 协议的基本格式

HTTP协议("超文本传输协议")&#xff0c;是一个被广泛使用应用层协议&#xff0c;自1991年正式发布HTTP协议以来&#xff0c;HTTP协议就一直在更新&#xff0c;目前已经更新到3.0版本&#xff0c;但是目前主流的依旧是1.1版本&#xff0c;但依旧是一个最主流使用的应…...

STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设&#xff08;中断、I2C、USART、SPI等配置&#xff09;在STM32CubeMX中的设置为主&#xff0c;对驱动代码编写不做记录&#xff0c;所以阅读本文最好有标准库开发经验。除第2节外&#xff0c;使用的都是韦东山…...

vue3-print打印eletable某一行的数据

主页面的表格 <template><el-table :data"list"><el-table-column label"操作" align"center"><template #default"scope"><el-buttonlinktype"primary"click"handleType(scope.row)"…...

【Vue】pnpm创建Vue3+Vite项目

初始化项目 &#xff08;1&#xff09;cmd切换到指定工作目录&#xff0c;运行pnpm create vue命令&#xff0c;输入项目名称后按需安装组件 &#xff08;2&#xff09;使用vs code打开所创建的项目目录&#xff0c;Ctrl~快捷键打开终端&#xff0c;输入pnpm install下载项目…...

springboot配置多数据源

springboot配置多数据源 学习新技术&#xff0c;争做新青年&#xff0c;欢迎围观&#xff0c;河南老乡在上海请&#xff0c;加&#xff0c;微&#xff0c;andyfau2022&#xff0c; ----获取数据源&#xff1a;null&#xff0c;数据源为null时默认使用主数据源的。 1-yml文件…...

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题&#xff1a;墙体两侧特征混淆误匹配&#xff0c;导致建图和定位偏差&#xff0c;表现为过门跳变、外月台走歪等 解决思路&#xff1a;预期的根治方案IGICP需要较长时间完成上线&#xff0c;先使用切分地图的工程化方案&#xff0c;即墙体两侧切…...

ChatGPT+Simple Mind Map生成思维导图:快速提升学习效率

一、告别杂乱笔记&#xff0c;一键生成清晰思维导图&#xff01; 最近开始学习网络安全&#xff0c;一头扎进了各种协议、漏洞、防御机制的海洋中。信息量巨大&#xff0c;知识点零散&#xff0c;让我很快便陷入了“知识焦虑”——笔记越记越多&#xff0c;却越来越混乱&#…...

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式&#xff1a;3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制&#xff1a;Maven & SpringBoot 多环境兼容 配置文件分类&#xff1a;4种 整合…...

Wordpress右下角表单弹出插件

Ultimate Sticky Popup & Widgets Charcoal Making Machine | Equipment for Sale - Kingtiger...

影刀RPA实战:自动化批量生成条形码完整指南

今天我们聊聊使用影刀来实现批量生成条形码&#xff0c;条形码在零售行业运用非常广泛&#xff0c;主要作用表现在产品识别&#xff0c;库存管理&#xff0c;销售管理&#xff0c;防伪保护等&#xff0c;这些作用使其成为现代商业和工业环境中不可或缺的工具&#xff0c;它极大…...

Python Flask简介

简介 Flask 有两个主要依赖&#xff1a;路由、调试和 Web 服务器网关接口&#xff08;Web Server Gateway Interface&#xff0c;WSGI&#xff09; 子系统由&#xff1a;Werkzeug 提供模板系统由&#xff1a;Jinja2提供Werkzeug 和 Jinjia2 都是由 Flask 的核心开发者开发而成…...

视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践

随着科技的飞速发展&#xff0c;视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台&#xff0c;不仅依赖于先进的硬件设备&#xff0c;更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术&#xff0c;…...

欧拉下搭建第三方软件仓库—docker

1.创建新的文件内容 切换目录到etc底下的yum.repos.d目录&#xff0c;创建docker-ce.repo文件 [rootlocalhost yum.repos.d]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# vim docker-ce.repo 编辑文件,使用阿里源镜像源&#xff0c;镜像源在编辑中需要单独复制 h…...

pcs升压变流一体机

在当今全球积极推进能源转型的大背景下&#xff0c;新能源技术的发展日新月异。其中&#xff0c;PCS 升压变流一体机作为一种关键的能源转换设备&#xff0c;正发挥着越来越重要的作用。它一般可分为10KV与35KV等级的。 PCS 升压变流一体机&#xff0c;全称为 Power Conversion…...

上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例

背景&#xff1a; 地铁&#xff0c;作为城市的活力脉搏&#xff0c;不仅是衔接城市生活的关键纽带&#xff0c;更是现代城市交通体系中不可或缺的核心组成部分。因此&#xff0c;确保地铁的稳定运行对任何一座城市都至关重要。 上海泗博自动化&#xff0c;作为与成都地铁项目合…...

猫鼠游戏: KaijiK病毒入侵溯源分析

1. 事件背景 近期&#xff0c;网宿平台某客户在使用云主机工作的时候突然出现主机卡顿&#xff0c;连接不稳定&#xff0c;网络断开的情况&#xff0c;并且收到了网宿主机入侵检测产品的告警信息。由于客户没有专职的安全人员&#xff0c;由运维人员兼任安全运营工作&#xff…...

【Hot100算法刷题集】双指针-02-盛水最多的容器(含暴力枚举、双指针法及其合理性证明)

&#x1f3e0;关于专栏&#xff1a;专栏用于记录LeetCode中Hot100专题的所有题目 &#x1f3af;每日努力一点点&#xff0c;技术变化看得见 题目转载 题目描述 &#x1f512;link->题目跳转链接 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的…...

Spring和Spring FrameWork有什么关系?两者是同一个东西吗?

Spring和Spring Framework之间的关系可以归结为以下几点&#xff1a; 广义与狭义的理解 广义上的Spring&#xff1a; 广义上的Spring泛指以Spring Framework为基础的整个Spring技术栈。Spring已经发展成为一个由多个不同子项目&#xff08;模块&#xff09;组成的成熟技术体系…...

windows10 python 解决鼠标右键菜单中没有Edit with IDLE(不使用注册表编辑器)

随便选择一个py文件&#xff0c;右击打开属性。 打开方式&#xff1a;点击更改。 最下面&#xff1a;点击更多应用&#xff0c;点击在这台电脑上查找应用 搜索找到你自己按照的python路径下 Python39\Lib\idlelib\idle.bat 文件 点击打开&#xff0c;结束。...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...