Springboot内置的工具类之StringUtils

news2024/11/27 12:41:38

        在实际的业务开发中,除了经常有针对对象的判断或操作以外,经常也会遇到的就是字符串的判断和操作。比如判断字符串是否为空、是否以某个字符结尾、去除头部和尾部的空白字符、字符的查找和替换。在Spring的核心包中存在这样一个类org.springframework.util.StringUtils,它提供了常见的关于字符串的判断和操作的静态方法。下面咱们针对一些常见的一块学习一下,顺便再把前面说的断言给复习一下:

org.springframework.util.StringUtils

字符串判断

 判断字符串是否为 null,或 ""。注意,包含空白符的字符串为非空。

boolean isEmpty(Object str)

@Test
public void test() {
    String name = "";
    boolean empty = StringUtils.isEmpty(name);
    Assert.isTrue(empty, "变量name是有值的");
    System.out.println("给name赋值为zhangsan");
    name = "zhangsan";
    boolean empty1 = StringUtils.isEmpty(name);
    Assert.isTrue(empty1, "变更name是有值的");
}

判断字符串是否是以指定内容结束。忽略大小写。

boolean endsWithIgnoreCase(String str, String suffix)

@Test
public void test2() {
    String name = "zhangsanAK";
    boolean ak = StringUtils.endsWithIgnoreCase(name, "ak");
    Assert.isTrue(ak, "变量name不是以ak结尾的");
    boolean akb = StringUtils.endsWithIgnoreCase(name, "akb");
    Assert.isTrue(akb, "变量name不是以akb结尾的");
}

判断字符串是否已指定内容开头。忽略大小写。

boolean startsWithIgnoreCase(String str, String prefix)

@Test
public void test3() {
    String name = "OKzhangsan";
    boolean ok = StringUtils.startsWithIgnoreCase(name, "ok");
    Assert.isTrue(ok, "变量name不是以ak结尾的");
    boolean abc = StringUtils.startsWithIgnoreCase(name, "abc");
    Assert.isTrue(abc, "变量name不是以abc开始的");
}

是否包含空白符。

boolean containsWhitespace(String str)

@Test
public void test4() {
    String name = "OK zhangsan";
    boolean spaceFlag = StringUtils.containsWhitespace(name);
    Assert.isTrue(spaceFlag, "变量name没有包含空格");
    System.out.println("给name赋值为zhangsan");
    name = "zhangsan";
    boolean spaceFlag2 = StringUtils.containsWhitespace(name);
    Assert.isTrue(spaceFlag2, "变量name没有包含空格");
}

判断字符串非空且长度不为 0,即,Not Empty。

boolean hasLength(CharSequence str)

@Test
public void test5() {
    String name = "zhangsan";
    boolean lengthFlag = StringUtils.hasLength(name);
    Assert.isTrue(lengthFlag, "变量name非空,但是长度为0");
    System.out.println("给name赋值为一个空字符串");
    name = " ";
    boolean lengthFlag2 = StringUtils.hasLength(name);
    Assert.isTrue(lengthFlag2, "变量name非空,但是长度为0");
    System.out.println("给name赋值为一个空字符串,但长度为0");
    name = "";
    boolean lengthFlag3 = StringUtils.hasLength(name);
    Assert.isTrue(lengthFlag3, "变量name非空,但是长度为0");
}

判断字符串是否包含实际内容,即非仅包含空白符,也就是 Not Blank。这里要特别注意一下,通常empty是指null、“”,“ ”,多个空字符就不会认为是Empty了,而是Blank;

boolean hasText(CharSequence str)

@Test
public void test6() {
    String name = "zhangsan";
    boolean lengthFlag = StringUtils.hasText(name);
    Assert.isTrue(lengthFlag, "变量name非空,但是长度为0");
    System.out.println("给name赋值为一个空字符串");
    name = "      ";
    boolean lengthFlag2 = StringUtils.hasText(name);
    Assert.isTrue(lengthFlag2, "变量是一个空字符");
}

判断字符串指定索引处是否包含一个子串。

boolean substringMatch(CharSequence str, int index, CharSequence substring)

@Test
public void test7() {
    String msg = "I am zhangsan";
    boolean lengthFlag = StringUtils.substringMatch(msg, 5, "zhangsan");
    Assert.isTrue(lengthFlag, "变量msg的索引位置为5的地方,是zhangsan");
    msg = "I am not zhangsan";
    boolean lengthFlag2 = StringUtils.substringMatch(msg, 5, "zhangsan");
    Assert.isTrue(lengthFlag2, "变量msg的索引位置为5的地方,是zhangsan");
}

计算一个字符串中指定子串的出现次数。

int countOccurrencesOf(String str, String sub)

@Test
public void test8() {
    String msg = "aaa";
    int count = StringUtils.countOccurrencesOf(msg, "a");
    Assert.isTrue(count == 3, "变量msg中没有包含3个a");
    msg = "bbb";
    int count2 = StringUtils.countOccurrencesOf(msg, "b");
    Assert.isTrue(count2==4, "变量msg中没有包含4个b");
}

字符串操作

查找并替换指定子串。

String replace(String inString, String oldPattern, String newPattern)

@Test
public void test10() {
    String name = "aba";
    String name2 = StringUtils.replace(name, "b", "a");
    Assert.isTrue(name2.equals("aaa"), "变量name替换b后结果不是aaa");
}

去除尾部的特定字符。

String trimTrailingCharacter(String str, char trailingCharacter)

@Test
public void test11() {
    String name = "aba";
    String a = StringUtils.trimTrailingCharacter(name, 'a');
    Assert.isTrue(a.equals("ab"), "去除尾部的a后不是ab");
}

去除头部的特定字符。

String trimLeadingCharacter(String str, char leadingCharacter)

@Test
public void test12() {
    String name = "aba";
    String a = StringUtils.trimLeadingCharacter(name, 'a');
    Assert.isTrue(a.equals("ba"), "去除开头的a后不是ba");
}

去除头部的空白符。

String trimLeadingWhitespace(String str)

@Test
public void test13() {
    String name = "aba  ";
    String a = StringUtils.trimTrailingWhitespace(name);
    Assert.isTrue(a.equals("aba"), "去除尾部的空格失败了");
}

去除头部的空白符。

String trimTrailingWhitespace(String str)

@Test
public void test14() {
    String name = "   aba";
    String a = StringUtils.trimLeadingWhitespace(name);
    Assert.isTrue(a.equals("aba"), "去除开头的空格失败了");
}

去除头部和尾部的空白符。

String trimWhitespace(String str)

@Test
public void test15() {
    String name = "   aba    ";
    String a = StringUtils.trimWhitespace(name);
    Assert.isTrue(a.equals("aba"), "去除开头和尾部的空格失败了");
}

删除开头、结尾和中间的空白符。

String trimAllWhitespace(String str)

@Test
public void test16() {
    String name = "   a   b   a    ";
    String a = StringUtils.trimAllWhitespace(name);
    Assert.isTrue(a.equals("aba"), "去除开头、中间、尾部的空格失败了");
}

删除指定子串。

String delete(String inString, String pattern)

@Test
public void test17() {
    String name = "abcabc";
    String a = StringUtils.delete(name,"bc");
    Assert.isTrue(a.equals("aa"), "删除变更name里的字符b失败了");
}

对数组的每一项执行 trim() 方法。

String[] trimArrayElements(String[] array)

@Test
public void test18() {
    String[] names = {" zhangsan " ," li si "};
    String[] arr = StringUtils.trimArrayElements(names);
    for (String s : arr) {
        Assert.isTrue(s.equals("zhangsan")||s.equals("lisi"), "字符"+s+"中没有包含zhangsan或lisi");
    }
}

将 URL 字符串进行解码。

String uriDecode(String source, Charset charset)

@Test
public void test19() {
    String result="http://localhost:8080/abc?name=zhangsan";
    String url="http%3A%2F%2Flocalhost%3A8080%2Fabc%3Fname%3Dzhangsan";
    String tmp = StringUtils.uriDecode(url, Charset.forName("utf-8"));
    Assert.isTrue(result.equals(tmp), "解码失败");
}

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

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

相关文章

如何保证项目如期上线,测试工程师应该怎么做?

要保证项目按照正常进度发布,需要整个研发团队齐心协力。 有很多原因都可能会造成项目延期。1、产品经理频繁修改需求2、开发团队存在技术难题3、测试团队测不完今天我想跟大家聊一下,测试团队如何保证项目按期上线,以及在这个过程中可能遇到…

[附源码]Python计算机毕业设计SSM基于Web课堂签到管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

学生HTML网页作业:基于HTML+CSS+JavaScript画家企业8页

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

jvm垃圾处理

1.什么是垃圾 垃圾:没有引用指向的一个对象或者多个对象循环引用但是没有引用指向申请内存方式 c语言:malloc free c:new delete java:new 对象 2、垃圾是如何产生的 垃圾一般在发生引用传递时产生。一块堆内存可以被不同的栈内存所引用,…

DBCO-PEG-SPDP,SPDP-PEG-DBCO,DBCO-聚乙二醇-3-(2-吡啶二硫代)丙酸N-羟基琥珀酰亚胺

一、试剂基团反应特点(Reagent group reaction characteristics): DBCO-PEG-SPDP中无铜点击反应一直是无催化剂生物共轭的有力工具。 DBCO试剂在水性缓冲液中具有稳定性,可用于以高特异性和反应性标记叠氮化物修饰的生物分子&…

【知识图谱】(task3)知识图谱的存储和查询

note 用图数据库的场景: 高性能关系查询:需要快速遍历许多复杂关系的任何用例,如欺诈检测,社交网络分析,网络和数据库基础设施等;模型的灵活性:任何依赖于添加新数据而不会中断现有查询池的用例…

Linux Kernel 6.0 CXL Core Regs.c 详解

前言 CXL 是一个比较新的技术,所以我研究的内核源码是选了当前比较新的内核版本 linux 6.0。打算将内核关于 CXL 的驱动进行解析一遍,一步一步慢慢来。 在阅读之前,希望读者能有一定的 PCIe 基础知识,精力有限,不能把…

C++ 不知算法系列之聊聊希尔、归并排序算法中的分治哲学

1. 前言 排序算法中,冒泡、插入、选择属于相类似的排序算法,这类算法的共同点:通过不停地比较,再使用交换逻辑重新确定数据的位置。 希尔、归并、快速排序算法也可归为同一类,它们的共同点都是建立在分治思想之上。把…

Linux基本工具——gcc/g++与make/Makefile

Linux编译器,项目构成工具gcc/g程序翻译过程选项的含义动态链接静态链接如何识别静态链接和动态链接Linux项目自动化构建工具——make/Makefilemake/Makefile是什么make/Makefile的使用伪目标make/makefile推导过程gcc/g 程序翻译过程 预处理(去掉注释…

当了10年程序员,我开窍了

有人说,程序员的高收入和工作年限成正比,认为自己的薪资应该如此计算: private static boolean 计算工资() { //years工作时长(年) int years 5; while(years-- > 0){ 做项目(); 团建活动(); 涨工资(); 拿年终奖(); } return 跳槽() &…

12、后渗透测试--meterpreter使用

Post后渗透模块&#xff1a;在meterpreter > 中我们可以使用以下的命令来实现对目标的操作。一、基本系统命令 sessions # sessions –h 查看帮助sessions -i <ID值> # 进入会话 -k 杀死会话background # 将当前会话放置后台info # 查看已有模块信息getuid …

CSS之段落样式

1、文本缩进 标签&#xff1a;text-indent &#xff08;indent v. 缩进&#xff09;含义&#xff1a;首行缩进和字体大小有关&#xff1a;1个em等于一个字体大小 2、文本对齐方式 标签&#xff1a;text-align (align v. 调整&#xff0c;使一致)种类&#xff1a;左对齐、右对…

AFDet: Anchor Free One Stage 3D Object Detection

论文链接&#xff1a;https://arxiv.org/pdf/2006.12671v1.pdf 前言 在嵌入式系统上操作的高效点云3D目标检测对于包括自动驾驶在内的许多机器人应用来说都是重要的。 大多数以前的工作都试图使用基于Anchor的检测方法来解决这个问题&#xff0c;这些方法有2个缺点&#xff1…

《MySQL的基础语法》

【一】现实当前的数据库 show databases:记住这里的databases是复数形式&#xff0c;你可以简单理解为它不仅仅含有一个数据库&#xff0c;所以需要用到可数名词复数形式。 【二】创建数据库 create database 数据库的名字&#xff1a;记住这里的database用的是单数形式&#…

Django demo项目搭建

安装 Django 在应用程序开发中&#xff0c;分别创建env文件夹和wordspace文件夹。 env文件夹用于存放创建的虚拟环境&#xff0c;wordspace用于存放项目代码&#xff0c;至此实现虚拟环境和应用程序代码的分隔。 步骤1&#xff1a;创建文件夹&#xff0c;创建命令为mkdir en…

静态链接:空间与地址分配

前言 我们终于走到了链接这一步&#xff0c;对于链接这一步&#xff0c;它是将多个输入目标文件链接后输出一个可执行文件。我们拿两个程序a.c和b.c来举例说明链接的过程。 a.c&#xff1a; /* a.c */ extern int shared;int main(){int a 100;swap(&a,&shared); }…

从Mybatis到Mybatis-Plus学习

从Mybatis到Mybatis-PlusMybatis的入门Mybatis的配置解析核心配置文件分页配置注解开发mybatis的执行流程多对一一对多动态SQLmybatis 的缓存Mybatis-plus快速入门mybatis-plus的框架结构图分页查询和删除执行SQL分析打印条件构造器Wrapper代码生成器Mybatis的入门 环境&#…

io复用函数的使用

目录 一、概念 二、使用 1.select系统调用 代码实现 前言&#xff1a; 一般多客户端在和服务器通信时&#xff0c;服务器在执行recv时会先阻塞&#xff0c;然后按照顺序依次处理客户端&#xff0c;无论客户端有无数据都会被处理&#xff0c;这样大大降低了执行效率。此时就引…

代理 模式

代理模式 Proxy Pattern 为其他对象提供一个代理以控制对这个对象的访问 可以详细控制访问某个&#xff08;某类&#xff09;对象的方法&#xff0c;在调用这个方法前做前置处理&#xff0c;调用这个方法后做后置处理。 静态代理 直接写死的代码的代理逻辑 动态代理 动态…

12.2、后渗透测试--令牌窃取

攻击机kali&#xff1a;192.168.11.106靶机windows server 2008 R2&#xff1a;192.168.11.134&#xff08;包含ms17_010漏洞&#xff09;一、令牌简介与原理 令牌(Token) 就是系统的临时密钥&#xff0c;相当于账户名和密码&#xff0c;用来决定是否允许这次请求和判断这次请求…