Java String.split() 关于空值(empty results)

Java字符串转数组的五种方案与split()底层陷阱解析 字符串转数组是Java基础操作,本质涉及String不可变性、正则引擎匹配、数组内存分配等核心机制。其原理不仅限于API调用,更关联JVM对Pattern编译、Matcher执行及空字符串语义的处理逻辑。技术价值在于保障日志解析、配置加载、协议解包等关键链路的数据完整性与性能稳定性。典型应用场景包括CSV字段切分、URL参数提取、SKU属性解析等高可靠性要求的系统模块。深入理解split()的limit参数行为、正则转义规则及Guava/Splitter等替代方案,是规避线上空值丢失、OOM和安全风险的关键 阅读详情

现象

String testString1 = "1, 1, 0, 0, 0, 6.17, 3.50,,,,,,,,,,,,,1";
String testString2 = "1, 1, 0, 0, 0, 6.17, 3.50,,,,,,,,,,,,,";

采用默认的split方式

testString.split(",");

这两者的结果是不一致的,前者的长度是20,后者为7. 因为字符串中产生了空值。如果头和尾都有值,中间空,长度不影响。否则split结果会去掉空值。

细看下split的API

public String[] split(String regex,
int limit)
Splits this string around matches of the given regular expression.
The array returned by this method contains each substring of this string that is terminated by another substring that matches the given expression or is terminated by the end of the string. The substrings in the array are in the order in which they occur in this string. If the expression does not match any part of the input then the resulting array has just one element, namely this string.

The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array’s length will be no greater than n, and the array’s last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.

从API来看,核心有两点

  1. 第一个参数是正则表达式
  2. 第二个limit参数指定分割结果数目

解决方案

保留所有空值
String[] tpStrings = testString.split(",",-1);

不管空值出现在哪里,都不会丢弃

去掉空值
String[] tpStrings = testString.split(",+");

就是中间出现空值,也会舍弃

小深:用 AgentScope Java 2.0 Harness 做私人助手(下) Java 源码为便于发布已省略 行,落盘后请对照仓库或用 IDE 补全。承接上篇第四节。下面从领域工具开始,一路看到产品层与前端。作用: 时间与安全四则运算(@Tool) 作用: webSearch / webRead,具体协议走 WebSearchService 作用: 搜网页会话 JSON;官方 memory_search / session_search 不要重复造 作用: 递归下降计算器,拒绝任意代码执行 六、联网集成(MCP / REST) 作用: 搜索后端接口,MCP 与 REST 二 阅读详情

相关推荐

安装破解IAR EWARM 8.2,提供注册机

IAR Embedded Workbench for ARM(IAR for ARM)是一款微处理器的集成开发环境软件,该集成开发环境中包含了IAR的C/C++编译器、 汇编工具、链接器、库管理器、文本编辑器、工程管理器和C-SPY调试器,支持ARM,AVR,MSP430等芯片。   一、安装 双击运行安装程序,点击Install IAR Embedded Workbench for ARM...

睿思派克 4万+

关于java中使用split方法丢失末尾空值

使用默认的split方法时,会默认丢弃字符串末尾的空值,而字符串中间的空值则会作为数组中的一项数据,不会被丢弃。1、如果 n 大于 0,代表分割字符串后数组的最大长度,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n ,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。2、如果 n 为非正,代表获取数组所有值,不会丢弃末尾空值,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。3、如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。

lisheng19870305的专栏 2098

Circos图审美拯救计划:用TBtools复刻Nature级共线性分析图谱

本文针对Circos图在共线性分析中的审美提升问题,提供了一套基于TBtools的完整优化方案。通过构建和谐的色彩体系、精细控制信息层布局以及模仿顶刊构图逻辑,详细讲解了如何从配色、透明度、标签显示到高级参数设置,将默认图表升级为具有高级学术美感的Nature级图谱,助力研究者提升论文图表质量。

cherry的博客 911

java StringSplit 分割字符,空字符串仍然保留(limit用法)

由上述代码可知,limit :-1 可以将所有的数组值转化成数组值,不论其中是否有空字符串,limit:2或者4时,则将此字符串按照符合规则的数据,从头分隔成2个数组 或者4个数组,多余符合规则的数据则都放入最后一个数组中。String数据类型的split()方法是根据正则表达式来分割字符串,split 方法提供了两个参数即:split(String regex,int limit);平时使用比较多的是方法中的参数regex,本文着重讲述一个limit 参数的用法。

qq_35484657的博客 3865

【CMU-自主导航与规划】Autonomous Exploration Development Environment 实战:从环境搭建到多场景测试

本文详细介绍了CMU开源自主导航开发环境(Autonomous Exploration Development Environment)的实战部署与测试。内容涵盖从Ubuntu与ROS环境搭建、仿真场景配置,到核心导航模块(地形分析、局部避障、航点跟踪)的深度解析,并演示了如何集成TARE探索与FAR规划等上层算法,最终指导连接真实SLAM与实车部署,完成多场景性能评估。

weixin_29215391的博客 706

Ansys-结构动力学分析-圆柱斜齿轮模态分析学习心得

模态分析的步骤基本一直,不同点在于选择什么单元类型,模型,节点约束等 圆柱斜齿轮模态分析的难点在于圆柱斜齿轮的模型建立,和所要约束的节点的选择。 用命令流方法建立齿轮模型效率较高,当然,在ansys里建立复杂的模型实在不敢恭维,对于自下而上建模,需要知道每个关键点的坐标位置。下图是创建圆柱斜齿轮模型的命令流方式。 模型不同使用的数据也就不同了。 对于施加约束的问题这就必须要熟悉select e...

weixin_45385183的博客 1831

java String的Split方法, 分割字符时,保留最后的空字符串

可使用split(regex,limit)方法实现分割字符保留最后一个空字符串

饥饿中s的博客 2779

EverOS:为AI智能体构建长期记忆系统的完整指南

长期记忆是AI智能体实现持续学习和自我演进的核心能力,它通过结构化存储和关联检索历史交互信息,使智能体能够跨越单次对话的局限。其技术原理通常涉及向量数据库、记忆提取算法和知识图谱等组件,用于对非结构化对话内容进行编码、组织和索引。这一能力的技术价值在于显著提升了智能体的个性化服务水平、任务完成连贯性以及从经验中学习的能力,是实现真正“智能”伙伴的关键。在应用场景上,长期记忆系统广泛应用于个性化聊天伴侣、持续学习的编程助手、游戏NPC角色塑造以及客户服务机器人等领域。本文以EverOS为例,深入解析了其提供的

weixin_28679635的博客 449

Java 根据特定符号拆分,保存空数据

java split 保留空数据

zhangsen025651的博客 933

2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真

1.题目 给定两个单电源的双运放芯片READ2302G芯片(当时记得增益带宽积好像是6M),一片HD74LS74数字芯片双D触发器,需要详细电路图、手写报告,5个波形输出,测频,测幅,8:00公布题目,15:00停止答题,中间可以吃饭(也可以不吃继续做),15:00清场,休息一段时间后开始进场测试,打分。 2.要求 (1)一片运放搭建方波振荡电路,频率 20 KHz,误差 0.1 KHz,幅度 3...

DengFengLai123的博客 2万+

【AUTOSAR AP PHM 】PHM 标准化“检查点上报接口”落地指南(AUTOSAR AP · R24-11取向)

本文介绍了AUTOSAR AP R24-11标准下PHM(平台健康管理)模块中"检查点上报接口"的标准化实现方案。主要内容包括: 核心设计理念:采用"配置优先"原则,通过部署模型预先定义监管参数,应用进程只需简单上报枚举标识,具体判定由PHM执行。 职责划分: 应用进程:仅调用ReportCheckpoint接口上报枚举值 PHM:负责Alive计数、Deadline区间判定和Logical路径校验 EM/IdsM:提供进程状态和越权检测 三类监管机制: Alive:

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 220

java split的一个应用,保留后面空值

当以逗号分隔的最后是空字符串的时候,split默认长度不会计算后面的长度,比如 “Darlen2,”,split之后长度仍然为1,现在加个参数, s.split(",",-1),这样就可以加上后面的空字符串 String s="Darlen2,"; System.out.println(s.split(",",-1).length);

Tree3170 的专栏 4876

[Python图像处理] 十.形态学之图像顶帽运算和黑帽运算

数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像顶帽运算和图像黑帽运算,基础性知识希望对您有所帮助。

杨秀璋的专栏 1万+

Python、Java、C++字符串操作全解析:从基础到实战应用

字符串作为编程中最基础的数据类型,其本质是由字符组成的序列,在内存中以数组形式存储。理解字符串的不可变性原理对于编写高效代码至关重要,这种特性意味着每次修改都会创建新对象。字符串操作的技术价值体现在数据处理、用户输入验证、日志分析等核心场景,是每个开发者必须掌握的基本功。在实际工程实践中,字符串拼接性能优化、编码问题排查、正则表达式匹配等都是高频需求。本文基于字符串处理和Python编程等热词,通过多语言对比的方式,系统讲解字符串创建、查找、截取、格式化等核心操作,帮助开发者构建完整的字符串处理知识体系,提

circularr9834的博客 412

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【AgentScope Java新手村系列】(3)工具系统

工具系统 — @Tool/@ToolParam 注解将 Java 方法注册为 Agent 能力,自主决定调用时机,支持同步/异步返回。

m0_62929305的博客 383

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

x16-PRos 开发者贡献完整指南:NASM 编码规范 + 程序模板 + 提交 PR 流程

x16-PRos 是一个完全用 **NASM 汇编语言**从零编写的 16 位实模式(real mode)操作系统,自带终端、GUI 桌面、FAT12 文件系统、原生汇编器和 40+ 内置程序。无论你是想写第一个 "Hello World" 终端程序,还是贡献一个窗口化 GUI 应用,这份开发者贡献指南都会带你走完:搭建环境 → 遵循 NASM 编码规范 → 套用程序模板 → 提交 PR 的完整流

gitblog_00499的博客 303

Python装饰器实战进阶:自学是门手艺函数工具篇逐例精讲

正在自学 Python 的读者,欢迎打开开源项目 **《自学是门手艺》**(the-craft-of-selfteaching)。本书把编程当作掌握自学能力的入口,其中「函数工具」一章(Decorator、Iterator、Generator,简称 DIG)正是很多初学者卡住的难点。本文基于 [markdown/Part.3.B.3.decorator-iterator-generator.md]

gitblog_00641的博客 337

Java深入解析篇十九之函数式编程详解

函数式编程(FP)是一种以函数为核心构建程序的范式,强调: 1.2 Java的函数式支持 Java 8 并非纯函数式语言,而是在面向对象基础上引入函数式特性: 1.3 纯函数与副作用 2. Lambda表达式语法与原理 2.1 基本语法 2.2 变量捕获与闭包 2.3 编译原理:invokedynamic Lambda 不是编译为匿名内部类,而是通过 指令 + 在运行时生成: 2.4 this指向 3. 函数式接口体系 3.1 @FunctionalInterface 注解 3.2 核心

萧瑟余晖的博客 301

华为OD机试虚拟文件系统解题指南与实现

虚拟文件系统是操作系统中的核心组件,通过树形数据结构管理文件和目录。其实现原理主要依赖节点递归遍历与路径解析算法,在华为OD机试等编程考核中常作为综合能力考察点。本文以Python/C++为例,详解如何设计文件系统节点结构、处理路径导航及实现基础操作(mkdir/cd/ls)。针对华为OD双机位C卷特色题型,特别解析了树形数据结构与递归算法的工程应用技巧,并提供了包含边界条件处理的完整代码模板。这类题目能有效检验开发者对数据结构、算法设计和异常处理的综合掌握程度,是面试准备的重点方向。

weixin_34062469的博客 311

JDK 1.8核心特性解析与工程实践指南

函数式编程通过Lambda表达式和Stream API等特性,为Java开发带来了革命性变革。其核心原理是将行为参数化,通过高阶函数实现更简洁的代码表达。技术价值体现在提升开发效率、增强代码可读性以及更好的并行处理能力。在应用场景上,特别适合集合操作、异步任务处理和事件驱动编程。JDK 1.8引入的Optional类和新的日期时间API,则进一步解决了空指针异常和日期处理等常见痛点。本文深入剖析这些特性在电商订单处理、微服务网关等实际场景中的最佳实践,帮助开发者规避并行流线程安全等常见陷阱。

weixin_30552811的博客 324

用 Java 对齐 LangChain Deep Agents Harness(二)

作用: 对齐 Python TodoListMiddleware 的提示词 作用: 单条待办结构 作用: pending / in_progress / completed 作用: 按 session 外置 todos(委托 TodoRepository) 作用: 沙箱 workspace 读写编辑 作用: 声明式文件权限规则(allow/deny/interrupt) 作用: 按 glob 求值文件操作是否允许 作用: 长期记忆(对齐 MemoryMiddleware) 作用: 技能渐进式

qq_38363255的博客 266

数据切片技术全解析:从字符串操作到大数据分块处理实践

数据切片是编程中的基础概念,指从大型数据集中提取特定部分的操作技术。其核心原理是通过索引定位和范围截取,实现对字符串、数组、文件等数据结构的精准访问。这种技术价值在于提升数据处理效率,避免内存溢出,特别适合大数据场景。在工程实践中,数据切片广泛应用于日志分析、数据库分页查询、文件分块读取等场景。Python的字符串切片语法简洁强大,支持正负索引和步长参数,而Java通过substring方法实现类似功能。针对大数据处理,分块切片技术能有效管理内存,结合生成器和并行处理可显著提升性能。本文通过字符串切片、数组

weixin_33937913的博客 342

AI-DLC学习循环深度解析:让流程经验自动沉淀为可复用规则

AI-DLC(aidlc-workflows)是一套为 AI 编程代理设计的自适应工作流框架,其核心能力之一,就是学习循环(Learning Loop):当你在某个工作流阶段纠正了代理一次错误理解,框架会把这条纠正自动沉淀为一条可复用的持久规则,让同一个错误永远不需要纠正第二次。 本文面向新手,用最短的篇幅讲清楚:规则存在哪里、学习循环如何运转、以及你只需要做哪些操作。 ## 🎯 学习循环解

gitblog_09709的博客 935

解码-检测-修复-编码:拆解 Jasna 视频修复的 GPU 端到端管线

一段 3 分 22 秒的 1080p 素材(6056 帧),Jasna 的本地 GPU 管线用 38.6 秒跑完解码、检测、修复、编码;两年前同一输入在 v0.4.1 上要 106.3 秒。马赛克修复的矛盾很具体:遮挡区域往往只占画面一小部分,但传统做法要么对全帧跑超分网络,把算力浪费在无遮挡像素上,要么把素材上传到云端 GPU,把隐私和带宽一起交出去。Jasna 的解法一句话能说清:把问题拆成"

gitblog_00432的博客 778

前端、后端都能用!手把手教你用google-diff-match-patch给Web应用加个‘历史记录对比’功能

本文详细介绍了如何使用Google开源的`google-diff-match-patch`库为Web应用添加智能版本对比功能。该库支持JavaScript、Java、Python等多种语言,能高效识别文本差异并以可视化方式呈现,适用于内容管理系统、在线协作平台等场景。文章提供了前后端集成方案、性能优化技巧及进阶应用场景,帮助开发者快速实现专业级的版本对比功能。

weixin_30315905的博客 358
上一篇: Spark word2vec使用
下一篇: leetcode 404. Sum of Left Leaves
zekizz
博客等级 码龄12年 27粉丝 90原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值