关于Spring框架中StringUtils常用/易误用方法解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 关于Spring框架中StringUtils常用/易误用方法解析
Spring 框架给我们提供的StringUtils是我们判断字符串常用的方法,
但是有很多人一直非空判断很混乱,下面做一下总结

方法/步骤


StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false 
//注意在 StringUtils 中空格作非空处理
StringUtils.isEmpty("   ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false


 StringUtils.hasText(null) = false;  
 StringUtils.hasText("") = false;  
 StringUtils.hasText(" ") = false;  
 StringUtils.hasText("12345") = true;  
 StringUtils.hasText(" 12345 ") = true;  


 StringUtils.hasLength(null) = false;  
 StringUtils.hasLength("") = false;  
 StringUtils.hasLength(" ") = true;  
 StringUtils.hasLength("Hello") = true;  
   
  
 //是否包含空白字符  
 StringUtils.containsWhitespace(null)=false;  
 StringUtils.containsWhitespace("")=false;  
 StringUtils.containsWhitespace("a")=false;  
 StringUtils.containsWhitespace("abc")=false;  
 StringUtils.containsWhitespace("abc")=false;  
 StringUtils.containsWhitespace(" ")=true;  
 StringUtils.containsWhitespace(" a")=true;  
 StringUtils.containsWhitespace("abc ")=true;  
 StringUtils.containsWhitespace("a b")=true  
 StringUtils.containsWhitespace("a  b")  
  
 StringUtils.trimWhitespace(null)=null;  
 StringUtils.trimWhitespace("")="";  
 StringUtils.trimWhitespace(" ")="";  
 StringUtils.trimWhitespace("/t")="";  
 StringUtils.trimWhitespace(" a")="a";  
 StringUtils.trimWhitespace("a ")="a";  
 StringUtils.trimWhitespace(" a ")="a";  
 StringUtils.trimWhitespace(" a b ")="a b";  
  
 StringUtils.trimLeadingWhitespace(null)=null;  
 StringUtils.trimLeadingWhitespace("")="";  
 StringUtils.trimLeadingWhitespace(" ")="";  
 StringUtils.trimLeadingWhitespace("/t")="";  
 StringUtils.trimLeadingWhitespace(" a")="a";  
 StringUtils.trimLeadingWhitespace("a ")="a ";  
 StringUtils.trimLeadingWhitespace(" a ")="a ";  
 StringUtils.trimLeadingWhitespace(" a b ")="a b "  
 StringUtils.trimLeadingWhitespace(" a b  c ")="a b  c "  
  
 StringUtils.trimTrailingWhitespace(null)=null;  
 StringUtils.trimTrailingWhitespace(" ")="";  
 StringUtils.trimTrailingWhitespace("/t")="";  
 StringUtils.trimTrailingWhitespace("a ")="a";  
 StringUtils.trimTrailingWhitespace(" a")=" a";  
 StringUtils.trimTrailingWhitespace(" a ")=" a";  
 StringUtils.trimTrailingWhitespace(" a b ")=" a b";  
 StringUtils.trimTrailingWhitespace(" a b  c ")=" a b  c";  
  
  
 StringUtils.trimAllWhitespace("")="";  
 StringUtils.trimAllWhitespace(" ")="";  
 StringUtils.trimAllWhitespace("/t")="";  
 StringUtils.trimAllWhitespace(" a")="a";  
 StringUtils.trimAllWhitespace("a ")="a";  
 StringUtils.trimAllWhitespace(" a ")="a";  
 StringUtils.trimAllWhitespace(" a b ")="ab";  
 StringUtils.trimAllWhitespace(" a b  c "="abc";  

 // 统计一个子字符串在字符串出现的次数  
 StringUtils.countOccurrencesOf(null, null) == 0;  
 StringUtils.countOccurrencesOf("s", null) == 0;  
 StringUtils.countOccurrencesOf(null, "s") == 0;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "WERWER") == 0;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "x")=0;  
 StringUtils.countOccurrencesOf("erowoiueoiur", " ") == 0;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "") == 0;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "e") == 2;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "oi") == 2;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "oiu") == 2;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "oiur") == 1;  
 StringUtils.countOccurrencesOf("erowoiueoiur", "r") == 2;  
  
 //字符串替换  
 String inString = "a6AazAaa77abaa";  
 String oldPattern = "aa";  
 String newPattern = "foo";  
 // Simple replace  
 String s = StringUtils.replace(inString, oldPattern, newPattern);  
 s.equals("a6AazAfoo77abfoo")=true;  
  
 // Non match: no change  
 s = StringUtils.replace(inString, "qwoeiruqopwieurpoqwieur", newPattern);  
 s.equals(inString)=true  
 s = StringUtils.replace(inString, oldPattern, null);  
 s.equals(inString)=true  
  
 // Null old pattern: should ignore  
 s = StringUtils.replace(inString, null, newPattern);  
        s.equals(inString)=true  
  
 //删除字符串  
 String inString = "The quick brown fox jumped over the lazy dog";  
 String noThe = StringUtils.delete(inString, "the");  
 noThe.equals("The quick brown fox jumped over  lazy dog")=true;  
 String nohe = StringUtils.delete(inString, "he");  
 nohe.equals("T quick brown fox jumped over t lazy dog")=true;  
 String nosp = StringUtils.delete(inString, " ");  
 nosp.equals("Thequickbrownfoxjumpedoverthelazydog")=true;  
 String killEnd = StringUtils.delete(inString, "dog");  
 killEnd.equals("The quick brown fox jumped over the lazy ")=true;  
 String mismatch = StringUtils.delete(inString, "dxxcxcxog");  
  mismatch.equals(inString)=true;  
  
 //删除任何字符  
 //源代码如下  
 //char c = inString.charAt(i);  
 //如果不存在 c 值,则返回 -1  
 //if (charsToDelete.indexOf(c) == -1) {  
 //out.append(c);  
 //}  
  
 String inString = "Able was I ere I saw Elba";  
  
 String res = StringUtils.deleteAny(inString, "I");  
        res.equals("Able was  ere  saw Elba")=true;  
 res = StringUtils.deleteAny(inString, "AeEba!");  
 res.equals("l ws I r I sw l")=true;  
 String mismatch = StringUtils.deleteAny(inString, "#@$#$^");  
 mismatch.equals(inString)=true;  
  
 //源代码如下 return (str != null ? "'" + str + "'" : null);  
 assertEquals("'myString'", StringUtils.quote("myString"));  
 assertEquals("''", StringUtils.quote(""));  
 assertNull(StringUtils.quote(null));  
 //将第一个字符改大写  
 StringUtils.capitalize(Str)  
 //将第一个个字符改小写  
 StringUtils.uncapitalize(str)  
  
 //mypath/myfile.txt" -> "myfile.txt  
 //获取字符串文件名和扩展名  
 StringUtils.getFilename("myfile").equals("myfile")=true;  
 StringUtils.getFilename("mypath/myfile".equals("myfile")=true;  
 StringUtils.getFilename("mypath/myfile".equals("myfile")=true;  
 StringUtils.getFilename("myfile.txt").equals("myfile.txt")=true;  
 StringUtils.getFilename("mypath/myfile.txt").equals("myfile.txt")=true;  
  
 // 获取字符串扩展名,以.分隔  
 StringUtils.getFilenameExtension("myfile")=null;  
 StringUtils.getFilenameExtension("myPath/myfile")=null;  
 StringUtils.getFilenameExtension("myfile.").equals("")=true;  
 StringUtils.getFilenameExtension("myPath/myfile.").equals("")=true;  
 StringUtils.StringUtils.getFilenameExtension("myfile.txt").equals("txt")=true;  
 StringUtils.getFilenameExtension("mypath/myfile.txt").equals("txt")=true;  
  
 //舍去文件名扩展名  
 StringUtils.stripFilenameExtension(null)=true;  
 StringUtils.stripFilenameExtension("").equals("")=true;  
 StringUtils.stripFilenameExtension("myfile").equals("myfile")=true;  
 StringUtils.stripFilenameExtension("mypath/myfile").equals("mypath/myfile")=true;  
 StringUtils.stripFilenameExtension("myfile.").equals("myfile")=true;  
 StringUtils.stripFilenameExtension("mypath/myfile.").equals("mypath/myfile")=true;  
 StringUtils.stripFilenameExtension("mypath/myfile.").equals("mypath/myfile")=true;  
 StringUtils.stripFilenameExtension("myfile.txt").equals("myfile")=true;  
 StringUtils.stripFilenameExtension("mypath/myfile.txt").equals("mypath/myfile")=true

结论

StringUtils.isEmpty() 方法是判断不了空格的,所以要慎重用这个方法
StringUtils.hasText() 可以使用这个方法判断是否有内容,但是使用里面值的时候注意要trim掉左右空格
目录
相关文章
|
8天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
11天前
|
人工智能
歌词结构的巧妙安排:写歌词的方法与技巧解析,妙笔生词AI智能写歌词软件
歌词创作是一门艺术,关键在于巧妙的结构安排。开头需迅速吸引听众,主体部分要坚实且富有逻辑,结尾则应留下深刻印象。《妙笔生词智能写歌词软件》提供多种 AI 功能,帮助创作者找到灵感,优化歌词结构,写出打动人心的作品。
|
15天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
33 3
|
12天前
|
人工智能
写歌词的技巧和方法全解析:开启你的音乐创作之旅,妙笔生词智能写歌词软件
怀揣音乐梦想,渴望用歌词抒发情感?掌握关键技巧,你也能踏上创作之旅。灵感来自生活点滴,主题明确,语言简洁,韵律和谐。借助“妙笔生词智能写歌词软件”,AI辅助创作,轻松写出动人歌词,实现音乐梦想。
|
17天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
28 0
|
10天前
|
搜索推荐 Java Spring
Spring Filter深度解析
【10月更文挑战第21天】Spring Filter 是 Spring 框架中非常重要的一部分,它为请求处理提供了灵活的控制和扩展机制。通过合理配置和使用 Filter,可以实现各种个性化的功能,提升应用的安全性、可靠性和性能。还可以结合具体的代码示例和实际应用案例,进一步深入探讨 Spring Filter 的具体应用和优化技巧,使对它的理解更加全面和深入。
|
12天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
35 1
Spring 框架:Java 开发者的春天
|
3天前
|
机器学习/深度学习 人工智能 安全
TPAMI:安全强化学习方法、理论与应用综述,慕工大、同济、伯克利等深度解析
【10月更文挑战第27天】强化学习(RL)在实际应用中展现出巨大潜力,但其安全性问题日益凸显。为此,安全强化学习(SRL)应运而生。近日,来自慕尼黑工业大学、同济大学和加州大学伯克利分校的研究人员在《IEEE模式分析与机器智能汇刊》上发表了一篇综述论文,系统介绍了SRL的方法、理论和应用。SRL主要面临安全性定义模糊、探索与利用平衡以及鲁棒性与可靠性等挑战。研究人员提出了基于约束、基于风险和基于监督学习等多种方法来应对这些挑战。
12 2
|
4天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
14 2
|
4天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
44 1

推荐镜像

更多