Java常用工具之StringUtils类
目录
- 一、字符串判空
- 二、分隔字符串
- 三、判断是否为纯数字
- 四、将集合拼接成字符串
- 五、其他方法
字符串(String)在我们的日常工作中,用得非常非常非常多。
在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等。
如果只用 String 类提供的那些方法,我们需要手写大量的额外代码,不然容易出现各种异常。
现在有个好消息是:org.apache.commons.lang3包下的StringUtils工具类,给我们提供了非常丰富的选择。
Maven 坐标:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version>
</dependency>
StringUtils 提供了非常多实用的方法,大概有下图的四页到五页,我只截了两页,实在是太多了。

接下来,我们来拿一些常用的方法举例说明。
一、字符串判空
其实空字符串,不只是 null 一种,还有"“,” ","null"等等,多种情况。
StringUtils 给我们提供了多个判空的静态方法,例如:
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "abc";
System.out.println(StringUtils.isEmpty(str1));
System.out.println(StringUtils.isEmpty(str2));
System.out.println(StringUtils.isEmpty(str3));
System.out.println(StringUtils.isEmpty(str4));
System.out.println("=====");
System.out.println(StringUtils.isNotEmpty(str1));
System.out.println(StringUtils.isNotEmpty(str2));
System.out.println(StringUtils.isNotEmpty(str3));
System.out.println(StringUtils.isNotEmpty(str4));
System.out.println("=====");
System.out.println(StringUtils.isBlank(str1));
System.out.println(StringUtils.isBlank(str2));
System.out.println(StringUtils.isBlank(str3));
System.out.println(StringUtils.isBlank(str4));
System.out.println("=====");
System.out.println(StringUtils.isNotBlank(str1));
System.out.println(StringUtils.isNotBlank(str2));
System.out.println(StringUtils.isNotBlank(str3));
System.out.println(StringUtils.isNotBlank(str4));
执行结果:
true
true
false
false
=====
false
false
true
true
=====
true
true
true
false
=====
false
false
false
true
示例中的:isEmpty、isNotEmpty、isBlank和isNotBlank,这 4 个判空方法你们可以根据实际情况使用。
优先推荐使用isBlank和isNotBlank方法,因为它会把" "也考虑进去。
二、分隔字符串
分隔字符串是常见需求,如果直接使用 String 类的 split 方法,就可能会出现空指针异常。
String str1 = null;
System.out.println(StringUtils.split(str1,","));
System.out.println(str1.split(","));
执行结果:
null
Exception in thread "main" java.lang.NullPointerException
\tat com.sue.jump.service.test1.UtilTest.main(UtilTest.java:21)
使用 StringUtils 的 split 方法会返回 null,而使用 String 的 split 方法会报指针异常。
三、判断是否为纯数字
给定一个字符串,判断它是否为纯数字,可以使用isNumeric方法。例如:
String str1 = "123";
String str2 = "123q";
String str3 = "0.33";
System.out.println(StringUtils.isNumeric(str1));
System.out.println(StringUtils.isNumeric(str2));
System.out.println(StringUtils.isNumeric(str3));
执行结果:
true
false
false
四、将集合拼接成字符串
有时候,我们需要将某个集合的内容,拼接成一个字符串,然后输出,这时可以使用join方法。例如:
List<String> list = Lists.newArrayList("a", "b", "c");
List<Integer> list2 = Lists.newArrayList(1, 2, 3);
System.out.println(StringUtils.join(list, ","));
System.out.println(StringUtils.join(list2, " "));
执行结果:
a,b,c
1 2 3
五、其他方法
这里再列举一些,其他的方法可以自己去研究一下。
- trim(String str):去除字符串首尾的空白字符。
- trimToEmpty(String str):去除字符串首尾的空白字符,如果字符串为 null,则返回空字符串。
- trimToNull(String str):去除字符串首尾的空白字符,如果结果为空字符串,则返回 null。
- equals(String str1, String str2):比较两个字符串是否相等。
- equalsIgnoreCase(String str1, String str2):比较两个字符串是否相等,忽略大小写。
- startsWith(String str, String prefix):检查字符串是否以指定的前缀开头。
- endsWith(String str, String suffix):检查字符串是否以指定的后缀结尾。
- contains(String str, CharSequence seq):检查字符串是否包含指定的字符序列。
- indexOf(String str, CharSequence seq):返回指定字符序列在字符串中首次出现的索引,如果没有找到,则返回 -1。
- lastIndexOf(String str, CharSequence seq):返回指定字符序列在字符串中最后一次出现的索引,如果没有找到,则返回 -1。
- substring(String str, int start, int end):截取字符串中指定范围的子串。
- replace(String str, String searchString, String replacement):替换字符串中所有出现的搜索字符串为指定的替换字符串。
- replaceAll(String str, String regex, String replacement):使用正则表达式替换字符串中所有匹配的部分。
- join(Iterable<?> iterable, String separator):使用指定的分隔符将可迭代对象中的元素连接为一个字符串。
- split(String str, String separator):使用指定的分隔符将字符串分割为一个字符串数组。
- capitalize(String str):将字符串的第一个字符转换为大写。
- uncapitalize(String str):将字符串的第一个字符转换为小写。
相关文章:
Java常用工具之StringUtils类
目录 一、字符串判空二、分隔字符串三、判断是否为纯数字四、将集合拼接成字符串五、其他方法 字符串(String)在我们的日常工作中,用得非常非常非常多。 在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、…...
MyBatis-plus的批量插入方式对比分析
MyBatis-plus的批量插入方式对比分析 【摘要】Mybatis批量插入一直是开发者重点关注的问题,本文列举了Mybatis的五种插入方式进行对比分析,验证了五种批量插入的方式的优先级。 1 准备工作 1.1 新建spring项目 略。 1.2 导入pom.xml依赖 <depende…...
【系分论文】论软件开发模型及应用
目录 论题论题介绍论文要点理论素材准备范文摘要正文 论文补充知识 论题 论软件开发模型及应用 论题介绍 软件开发模型( Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发过程包括需求、设计、编码和测试等阶段&…...
渗透测试--5.3.使用john破解密码
前言 由于Linux是Internet最流行的服务器操作系统,因此它的安全性备受关注。这种安全主要靠口令实现。 Linux使用一个单向函数crypt()来加密用户口令。单向函数crypt()从数学原理上保证了从加密的密文得到加密前的明…...
Go中的变量类型
Go中的变量类型 1.为什么要使用变量 变量其实指定的是一段内存地址,根据这个内存地址可以找到我们需要找到的东西。 2.变量类型 变量的功能就是用来存储数据的,根据不同的数据类型可以存储不同的数据。常见的变量的类型 整型、浮点型、布尔型等。变…...
基于STM32的NRF24L01 2.4G通讯模块的驱动实验(HAL库)
前言:本文为手把手教学NRF24L01 2.4G通讯模块的驱动实验,本教程的 MCU 采用STM32F103ZET6与STM32F103C8T6,彼此进行互相通讯。通过 CubeMX 软件配置 SPI 协议驱动NRF24L01 2.4G通讯模块(HAL库)。NRF24L01 2.4G是嵌入式…...
DJ5-3 多路访问链路和协议
目录 一、网络链路 二、广播信道要解决问题 三、多路访问协议 1、基本介绍 2、多路访问协议的类型(3) 四、信道划分协议 1、时分多路访问 TDMA 2、频分多路访问 FDMA 3、码分多路访问 CDMA(略) 五、随机访问协议 1、纯…...
技术领导力?
作品集(Portfolio)会比简历(Resume)更有参考意义。 怎么才算有技术领导力? 1) 能够发现问题,并能够提供解决问题的思路和方案,并能比较方案的优缺点。 2) 能用更简洁有效的方式解决问题。 3…...
计算机的基本工作原理
参考资料: L-1.6: Common Bus system| How basic computer works - YouTube 准备好内存单元、不同类型的寄存器,内存和寄存器、寄存器和寄存器之间都是通过总线连接(假设是直接把数据总线、控制总线、地址总线变成一条总线)。 使用多路复用器实现的总线&…...
【论文简述】Cross-Attentional Flow Transformer for Robust Optical Flow(CVPR 2022)
一、论文简述 1. 第一作者:Xiuchao Sui、Shaohua Li 2. 发表年份:2021 3. 发表期刊:arxiv 4. 关键词:光流、Transformer、自注意力、交叉注意力、相关体 5. 探索动机:由于卷积的局部性和刚性权重,有限…...
【JAVA】Java中方法的使用,理解方法重载和递归
目录 1.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法调用的执行过程 1.4实参和形参 2.方法重载 2.1为什么需要使用方法重载 2.2什么是方法重载 3.递归 3.1什么是递归 3.2递归执行的过程 3.3递归的使用 1.方法的概念及使用 1.1什么是方法 方法就是一个代…...
高级网络计算模式复习
P2P 对等网络(Peer-to-Peer Networks)是分布式系统和计算机网络相结合的产物,在应用领域和学术界获得了广泛的重视和成功,被称为“改变Internet的一代网络技术”。 peer指网络结点,在行为上是自由的——任意加入、退…...
【笔试强训选择题】Day15.习题(错题)解析
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!! 文章目录 前言 一、…...
图论专题(一)
图论专题(一) 参考文献 BFS和DFS的直观解释 https://blog.csdn.net/c406495762/article/details/117307841Leetcode岛屿问题系列分析 https://blog.csdn.net/qq_39144436/article/details/124173504多源广度优先 https://blog.csdn.net/peko1/article/details/121989497拓扑排…...
新星计划2023【网络应用领域基础】————————Day4
常见的网络基础介绍 前言 我们学习了一些基础的网络协议,以及子网掩码和vlan,同时也做了个简单的单臂路由实验 这篇文章我将仔细的讲解单臂路由的应用和交换机二层接口类型,以及wireshark的教程。 一,交换机二层接口 交换机的二…...
[CTF/网络安全] 攻防世界 view_source 解题详析
[CTF/网络安全] 攻防世界 view_source 解题详析 查看页面源代码方式归类总结 题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。 查看页面源代码方式归类 单击鼠标右键,点击查看页面源代码: …...
目前流行的9大前端框架
1. React 2. Vue 3. Angular 、 4. Svelte 官网:https://svelte.dev 中文官网:https://www.sveltejs.cn Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作,而 Svelte 将这些工作放到构建应用程…...
【mysql】explain执行计划之select_type列
目录 一、说明二、示例2.1 simple:简单表,不使用union或者子查询2.2 primary:主查询,外层的查询2.3 subquery:select、where之后包含了子查询,在select语句中出现的子查询语句,结果不依赖于外部…...
网易云音乐开发--音乐播放暂停切换上下首功能实现
音乐播放暂停功能实现 封装一个控制音乐播放/暂停的功能函数 看一下文档,我需要用的api 这个接口好像没有音频的url,查看一下,换个api 这样就能拿到id,并可以播放了 但是音乐并没有播放 我们少了这个 现在可以播放了ÿ…...
如何学习网络安全?
近半年我一直在整理网络安全相关资料,对于网络安全该怎么入门我谈谈我的看法,网络安全一直处于法律的边缘,学的不好或者剑走偏锋一下子人就进去了,所以我建议入门前先熟读《网络安全法》,除此之外还有《互联网安全产品…...
DISCO/TSK机型切割道与切痕标注及对称中心定位系统
DISCO/TSK机型切割道与切痕标注及对称中心定位系统 摘要 在半导体晶圆划片工艺中,切割道(Scribe Line)与切痕(Kerf)的精确检测与定位对于保证芯片分割质量、减少崩边及提高良率至关重要。本文针对DISCO、TSK等主流划片机机型,提出了一套基于图像处理的切割道与切痕自动…...
Qwen3-14B成本效益分析:RTX 4090D月租成本 vs A100 80G部署性价比对比
Qwen3-14B成本效益分析:RTX 4090D月租成本 vs A100 80G部署性价比对比 1. 引言:大模型私有部署的成本挑战 在人工智能技术快速发展的今天,企业面临一个关键决策:如何在有限的预算内实现大语言模型的高效部署。Qwen3-14B作为通义…...
Palantir:两个不确定的问题(2)FDE会被AI完全替代吗?
从上一篇的分析可以得知,Palantir的整套系统,就是一个有机的企业级数字孪生体: 本体Ontology灵魂/主宰 它定义世界“是什么、有什么、彼此关系如何”,是客观现实与人类主观认识的统一,是整个系统的 “道”。 AIP心与…...
AutoGen Studio步骤详解:Qwen3-4B在AssiantAgent中Base URL与模型绑定
AutoGen Studio步骤详解:Qwen3-4B在AssiantAgent中Base URL与模型绑定 1. 了解AutoGen Studio与Qwen3-4B模型 AutoGen Studio是一个低代码界面,专门帮助开发者快速构建AI代理应用。通过这个平台,你可以轻松创建AI代理、为它们添加工具功能、…...
Unity中TextMeshPro (TMP) 中文项目字体优化
一、常用配置方案 A.静态主字体(Static Asset) 用途:储存游戏 95% 以上的文本配置内容:ASCII 字符(英文、数字、符号) 通用规范汉字一级字库(3500字) 配置操作步骤: Win…...
多尺度特征融合在计算机视觉中的实践与优化
1. 多尺度特征融合的核心价值与应用场景 第一次接触多尺度特征融合是在处理医疗影像分割项目时遇到的难题。当时我们的模型在识别大尺寸肿瘤时表现良好,但对微小病灶的检测率却惨不忍睹。这个问题困扰了我们团队整整两周,直到尝试了FPN(特征金…...
ROLL Agentic RL实战:多轮交互智能体的训练与部署
ROLL Agentic RL实战:多轮交互智能体的训练与部署 【免费下载链接】ROLL An Efficient and User-Friendly Scaling Library for Reinforcement Learning with Large Language Models 项目地址: https://gitcode.com/gh_mirrors/roll13/ROLL ROLL(…...
三层三列立体停车库的PLC实战开发手记
基于PLC的升降横移立体停车库的设计,设计一个基于西门子S7-200 PLC控制核心的,三层三列,九个车位的立体停车控制系统。 目录\\t3 1 绪 论\\t4 2 设计要求\\t5 3 硬件设计\\t8 3.1 PLC型号的选择和确定\\t8 3.2 主电路设计\\t8 3.3 控制电路…...
OpenClaw人人养虾:语音唤醒
Voice Wake(语音唤醒)功能允许你通过说出唤醒词来激活 Agent,类似于 "Hey Siri" 或 "小爱同学"。唤醒前设备处于低功耗监听状态,唤醒后进入对话模式。 工作原理 低功耗监听 → 检测到唤醒词 → 激活 Agent …...
SIwave TDR仿真实战:从模型导入到阻抗结果深度解析
1. SIwave TDR仿真基础与实战价值 TDR(时域反射计)仿真是高速电路设计中不可或缺的验证手段。我第一次接触SIwave的TDR功能是在一个10Gbps SerDes链路项目中,当时遇到了信号完整性问题却苦于找不到准确的阻抗突变点。传统频域仿真虽然能给出S…...
