StringUtils 工具类

在日常的编程工作中,字符串(String)处理是一个非常常见且重要的任务。无论是字符串的判空、截取、转换大小写、分隔、比较,还是去除多余空格、拼接、使用正则表达式等操作,都需要我们编写大量的代码来处理各种边界情况,以避免出现异常。

为了简化这些常见的字符串操作,Apache Commons Lang3 库提供了一个非常强大的工具类:StringUtils。这个工具类包含了大量实用的静态方法,可以帮助我们更高效、更安全地处理字符串。

1 引入依赖

首先,我们需要在项目中引入 Apache Commons Lang3 库。如果你使用 Maven 来管理依赖,可以在 pom.xml 文件中添加以下依赖:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version>
</dependency>

2 字符串判空

在实际开发中,字符串的判空是一个非常常见的操作。空字符串不仅仅包括 null,还包括 """ ""null" 等多种情况。StringUtils 提供了多个方法来处理这些情况:

  • isEmpty(CharSequence cs):判断字符串是否为空或长度为 0。
  • isNotEmpty(CharSequence cs):判断字符串是否不为空且长度不为 0。
  • isBlank(CharSequence cs):判断字符串是否为空、长度为 0 或仅包含空白字符。
  • isNotBlank(CharSequence cs):判断字符串是否不为空、长度不为 0 且不包含空白字符。

示例代码:

String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "abc";System.out.println(StringUtils.isEmpty(str1));  // true
System.out.println(StringUtils.isEmpty(str2));  // true
System.out.println(StringUtils.isEmpty(str3));  // false
System.out.println(StringUtils.isEmpty(str4));  // falseSystem.out.println(StringUtils.isNotEmpty(str1));  // false
System.out.println(StringUtils.isNotEmpty(str2));  // false
System.out.println(StringUtils.isNotEmpty(str3));  // true
System.out.println(StringUtils.isNotEmpty(str4));  // trueSystem.out.println(StringUtils.isBlank(str1));  // true
System.out.println(StringUtils.isBlank(str2));  // true
System.out.println(StringUtils.isBlank(str3));  // true
System.out.println(StringUtils.isBlank(str4));  // falseSystem.out.println(StringUtils.isNotBlank(str1));  // false
System.out.println(StringUtils.isNotBlank(str2));  // false
System.out.println(StringUtils.isNotBlank(str3));  // false
System.out.println(StringUtils.isNotBlank(str4));  // true

推荐优先使用 isBlankisNotBlank 方法,因为它们会考虑空白字符的情况。

3 分隔字符串

在处理字符串分隔时,直接使用 String 类的 split 方法可能会导致空指针异常。StringUtils 提供了更安全的 split 方法:

String str1 = null;
System.out.println(StringUtils.split(str1, ","));  // null
System.out.println(str1.split(","));  // 抛出 NullPointerException

4 判断是否纯数字

有时候我们需要判断一个字符串是否为纯数字。StringUtils 提供了 isNumeric 方法来实现这一功能:

String str1 = "123";
String str2 = "123q";
String str3 = "0.33";System.out.println(StringUtils.isNumeric(str1));  // true
System.out.println(StringUtils.isNumeric(str2));  // false
System.out.println(StringUtils.isNumeric(str3));  // false

5 将集合拼接成字符串

在某些场景下,我们需要将一个集合的内容拼接成一个字符串。StringUtils 提供了 join 方法来实现这一功能:

List<String> list = Lists.newArrayList("a", "b", "c");
List<Integer> list2 = Lists.newArrayList(1, 2, 3);System.out.println(StringUtils.join(list, ","));  // a,b,c
System.out.println(StringUtils.join(list2, " "));  // 1 2 3

6 其他常用方法

除了上述方法外,StringUtils 还提供了许多其他实用的方法,例如:

  • 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):将字符串的第一个字符转换为小写。

7 总结

StringUtils 工具类提供了丰富的字符串处理方法,能够帮助我们简化代码、提高开发效率,并且避免常见的字符串操作错误。在日常开发中,合理利用这些方法可以显著提升代码的可读性和健壮性。

8 思维导图

在这里插入图片描述

9 参考链接

Apache StringUtils:专为Java字符串而生的工具类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11507.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【视觉SLAM】Windows下编译Pangolin-0.5,显示SLAM运动轨迹

1. 三方库配置 Pangolin v0.5 eigen3 v3.3.8 glew v2.1.0 1.1 glew eigen3 glew&#xff1a;直接下载预编译版本即可&#xff08;注意&#xff1a;查看自己电脑显卡支持的OpenGL版本&#xff0c;下载支持对应版本的glew&#xff0c;不然无法显示窗口&#xff09;&#xff1b;e…

人工智能、机器学习与深度学习:层层递进的技术解读

引言 在当今科技快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为一个热门话题&#xff0c;几乎渗透到了我们生活的方方面面。从智能手机的语音助手&#xff0c;到自动驾驶汽车&#xff0c;再到医疗诊断中的图像识别&#xff0c;人工智能的应用正在改变我…

如何构建数仓中的维度拉链表

1 什么是拉链表 1&#xff09;拉链表是针对数据仓库设计中表存储数据的方式而定义的&#xff0c;顾名思义&#xff0c;所谓拉链&#xff0c;就是记录历史。记录一个事物从开始&#xff0c;一直到当前状态的所有变化的信息。 2&#xff09;使用拉链表既能满足反应数据的历史状…

后端SpringBoot学习项目-项目基础搭建

IDEA创建SpringBoot项目 大佬文章&#xff0c;有基础者可以直接打开参考。我这个记录的是纯纯小白的步骤 创建项目 按钮新建 点击按钮-----新建项目 弹窗配置–生成器 弹窗中选择生成器 ---- Spring Initializr ○ 服务器URL修改为 start.springboot.io start.aliyun.co…

Android CarrierConfig 参数项和正则匹配逻辑

背景 在编写CarrierConfig的时候经常出现配置不生效的情况&#xff0c;比如运营商支持大范围的imsi&#xff0c;或者是测试人员写卡位数的问题等等&#xff0c;因此就需要模式匹配&#xff08;包含但不限于正则表达式&#xff09;。 基本概念: 模式匹配涉及定义一个“模式”&a…

《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》

一、GC6125 在 IPcamera 和云台控制中的卓越表现 驱动能力&#xff1a;为监控注入强劲动力 GC6125 作为一款专为 IPcamera 和云台控制而设计的驱动芯片&#xff0c;拥有令人惊叹的驱动能力。在云台电机的驱动方面&#xff0c;它就像一位技艺精湛的驭手&#xff0c;能精准地掌控…

qt QUndoView详解

1、概述 QUndoView 是 Qt 框架中用于显示 QUndoStack&#xff08;撤销堆栈&#xff09;内容的视图类。它通常与 QUndoStack 一起使用&#xff0c;为用户提供了一个可视化的界面来查看和操作撤销/重做历史。QUndoView 可以显示堆栈中的每个命令&#xff0c;并允许用户通过界面进…

spring:Spring Security实践过程中的报错总结

文章目录 问题1报错解决 问题2报错解决 问题3报错解决 问题4报错解决 问题5报错解决 问题6报错解决 问题1 报错 You have entered a password with no PasswordEncoder. If that is your intent, it should be prefixed with {noop}. 解决 Spring Security 期望密码使用 Pa…

目前对于后期的打算

在完成了 Python 基本语法的学习后&#xff0c;我犹如推开了编程世界的一扇大门&#xff0c;初窥门径却也深知前方还有广袤无垠的知识天地等待我去探索。Python 作为一门广泛应用于软件开发、数据分析和人工智能等领域的高级编程语言&#xff0c;在当今数字化时代具有举足轻重的…

多种算法解决组合优化问题平台

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月11日7点12分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17302099790265&uidef7618fa204346ff9…

C/C++逆向:结构体逆向分析

在C/C程序的逆向分析中&#xff0c;结构体的逆向分析是非常重要的。结构体是C/C中管理和组织数据的一种主要方式。了解它们的布局可以帮助你理解程序是如何存储、处理和传递数据的&#xff0c;结构体常用于组织和管理复杂的数据&#xff0c;理解结构体有助于我们更好地还原程序…

Kettle启动闪退(Couldn‘t read the database cache)

强制关机之后&#xff0c;kettle启动闪退 具体可以用debug模式运行脚本来定位问题 启动之后查看运行日志 DEBUG: Using JAVA_HOME DEBUG: _PENTAHO_JAVA_HOMEC:\Application\JDK DEBUG: _PENTAHO_JAVAC:\Application\JDK\bin\java.exeC:\Application\Kettle\data-integratio…

【机器学习】任务十:从函数分析到机器学习应用与BP神经网络

目录 1.从函数分析到机器学习应用 1.1 3D曲面图可视化报告 1.1.1 目标 1.1.2 代码分析 1.1.3 结果分析 1.1.4 观察与总结 1.1.5 结论 1.2 一元函数梯度计算报告 1.2.1 目标 1.2.2 代码分析 1.2.4 计算结果 1.2.5 优势与意义 1.2.6 结论 1.3 一元函数梯度和二阶导…

写一段python程序,利用时间序列分析的方法,预测股价的趋势

要使用时间序列分析来预测股价趋势&#xff0c;你需要使用统计学方法来分析历史股价数据&#xff0c;并基于这些数据来预测未来的股价走势。以下是一个简单的Python程序&#xff0c;使用ARIMA&#xff08;自回归积分滑动平均模型&#xff09;来预测股价趋势。 首先&#xff0c;…

C++初阶——类和对象(中)

目录 1、类的默认成员函数 2、构造函数 3、析构函数 4、拷贝构造函数 5、赋值运算符重载函数 5.1 运算符重载 5.2 赋值运算符重载函数 6、取地址运算符重载函数 6.1 const成员函数 6.2 取地址运算符重载函数 1、类的默认成员函数 默认成员函数就是用户没有显式实现&a…

蓝牙电话-如何做到无人值守(方案探讨)

蓝牙电话-如何做到无人值守&#xff08;方案探讨&#xff09; 一、前言 在蓝牙电话出现和在市场上使用的过程中&#xff0c;有好多的客户和友商隐晦或含蓄的咨询&#xff0c;问说蓝牙方案及其构建的体系&#xff0c;能不能做到无人值守&#xff1f;就是那种因业务原因需要把设备…

网络号和网络地址一样吗?真相揭晓

网络号和网络地址是两个在计算机网络领域中经常被提及的概念&#xff0c;尽管它们之间存在一定的关联性&#xff0c;但它们并不等同。为了深入理解这两个概念&#xff0c;我们需要从它们的定义、功能、应用以及相互关系等方面进行详细探讨。 一、网络号的定义与功能 网络号&am…

计算机网络-1.2分层结构

文章目录 三种分层结构OSI 七层模型&#xff08;Open Systems Interconnection Model&#xff09;TCP/IP 四层模型混合模型各层之间的关系PDU,SDU,PCIPDU&#xff08;Protocol Data Unit&#xff09;SDU&#xff08;Service Data Unit&#xff09;PCI&#xff08;Protocol Cont…

css:还是语法

emmet的使用 emmet是一个插件&#xff0c;Emmet 是 Zen Coding 的升级版&#xff0c;由 Zen Coding 的原作者进行开发&#xff0c;可以快速的编写 HTML、CSS 以及实现其他的功能。很多文本编辑器都支持&#xff0c;我们只是学会使用它&#xff1a; 生成html结构 <!-- emme…

2024年第45周ETF周报

ETF 第45 周 &#xff08; 2024-11-04 至 2024-11-10 &#xff09;周报 核心观点 ETF 业绩表现 股票型ETF周度收益率中位数为4.5831%宽基ETF中&#xff0c;创业板指涨跌幅中位数为6.1644%&#xff0c;跌幅最小。按板块划分&#xff0c;金融涨跌幅中位数为9.1867%&#xff0c…