【小家Spring】Spring Framework提供的实用纯Java工具类大合集(一)(下)

简介: 【小家Spring】Spring Framework提供的实用纯Java工具类大合集(一)(下)

字符串头尾操作


都是对字符串前,或者字符串后的内容进行判定或者操作

//字符串头尾操作
// String trimWhitespace(String str):去掉字符串前后的空格
assertEquals("abc", StringUtils.trimWhitespace(" abc "));
// String trimAllWhitespace(String str):去掉字符串中所有的空格
assertEquals("abc", StringUtils.trimAllWhitespace(" a b c "));
// String trimLeadingWhitespace(String str):去掉字符串开头的空格
// String trimTrailingWhitespace(String str):去掉字符串结束的空格
// String trimLeadingCharacter(String str, char leadingCharacter):去掉字符串开头的指定字符;
// String trimTrailingCharacter(String str, char trailingCharacter):去掉字符串结尾的指定字符;
// boolean startsWithIgnoreCase(String str, String prefix):
// 判断字符串是否以指定字符串开头,忽略大小写
assertTrue(StringUtils.startsWithIgnoreCase("abcd", "AB"));
// boolean endsWithIgnoreCase(String str, String suffix):
// 判断字符串是否以指定字符串结尾,忽略大小写


文件路径名称相关操作(非常重要)

文件路径名称相关操作,是针对文件名,文件路径,文件后缀等常见文件操作中需要用到的方法进行封装;


// String unqualify(String qualifiedName):
// 得到以.分割的最后一个值,可以非常方便的获取类似类名或者文件后缀
assertEquals("java", StringUtils.unqualify("cn.wolfcode.java"));
assertEquals("java", StringUtils.unqualify("cn/wolfcode/Hello.java"));
// String unqualify(String qualifiedName, char separator):
// 得到以给定字符分割的最后一个值,可以非常方便的获取类似文件名
assertEquals("Hello.java", StringUtils.unqualify("cn/wolfcode/Hello.java", File.separatorChar));
// String capitalize(String str):首字母大写
assertEquals("Wolfcode", StringUtils.capitalize("wolfcode"));
// String uncapitalize(String str):取消首字母大写(首字母小写)
assertEquals("java", StringUtils.uncapitalize("Java"));
// String getFilename(String path):获取文件名,就不需要再使用FilenameUtils
assertEquals("myfile.txt",StringUtils.getFilename("mypath/myfile.txt"));
// String getFilenameExtension(String path):获取文件后缀名
assertEquals("txt",StringUtils.getFilenameExtension("mypath/myfile.txt"));
// String stripFilenameExtension(String path):截取掉文件路径后缀
assertEquals("mypath/myfile", StringUtils.stripFilenameExtension("mypath/myfile.txt"));
// String applyRelativePath(String path, String relativePath):
// 找到给定的文件,和另一个相对路径的文件,返回第二个文件的全路径
// 打印:d:/java/wolfcode/other/Some.java
System.out.println(StringUtils.applyRelativePath("d:/java/wolfcode/Test.java", "other/Some.java"));
// 但是不支持重新定位绝对路径和上级目录等复杂一些的相对路径写法:
// 仍然打印:d:/java/wolfcode/../other/Some.java
System.out.println(StringUtils.applyRelativePath("d:/java/wolfcode/Test.java", "../other/Some.java"));
// String cleanPath(String path): =====这个方法非常的重要
// 清理文件路径,这个方法配合applyRelativePath就可以计算一些简单的相对路径了
// 打印:d:/java/other/Some.java
System.out.println(StringUtils.cleanPath("d:/java/wolfcode/../other/Some.java"));
// 需求:获取d:/java/wolfcode/Test.java相对路径为../../other/Some.java的文件全路径:
// 打印:d:/other/Some.java
System.out.println(StringUtils.cleanPath(StringUtils.applyRelativePath( "d:/java/wolfcode/Test.java", "../../other/Some.java")));
// boolean pathEquals(String path1, String path2):
// 判断两个文件路径是否相同,会先执行cleanPath之后再比较
assertTrue(StringUtils.pathEquals("d:/wolfcode.txt","d:/somefile/../wolfcode.txt"));


字符串和子串的操作


该组方法中主要是提供了字符串和字符串子串的操作,比如子串的匹配,子串的替换;子串的删除等等操作;

// boolean substringMatch(CharSequence str, int index, CharSequence
// substring):判断从指定索引开始,是否匹配子字符串
assertTrue(StringUtils.substringMatch("aabbccdd", 1, "abb"));
// int countOccurrencesOf(String str, String sub):判断子字符串在字符串中出现的次数
assertEquals(4, StringUtils.countOccurrencesOf("ababaabab", "ab"));
// String replace(String inString, String oldPattern, String
// newPattern):在字符串中使用子字符串替换
assertEquals("cdcdacdcd", StringUtils.replace("ababaabab", "ab", "cd"));
// String delete(String inString, String pattern):删除所有匹配的子字符串;
assertEquals("a", StringUtils.delete("ababaabab", "ab"));
// String deleteAny(String inString, String charsToDelete):删除子字符串中任意出现的字符
assertEquals("", StringUtils.deleteAny("ababaabab", "bar"));
// String quote(String str) :在字符串前后增加单引号,比较适合在日志时候使用;
assertEquals("'hello'", StringUtils.quote("hello"));

和Locale相关的一些字符串操作


// Locale parseLocaleString(String localeString):
// 从本地化字符串中解析出本地化信息,相当于Locale.toString()的逆向方法
assertEquals(Locale.CHINA, StringUtils.parseLocaleString("zh_CN"));
// @deprecated as of 5.0.4, in favor of {@link Locale#toLanguageTag()}
// String toLanguageTag(Locale locale):把Locale转化成HTTP中Accept-Language能接受的本地化标准;
// 比如标准的本地化字符串为:zh_CN,更改为zh-CN
System.out.println(StringUtils.toLanguageTag(StringUtils.parseLocaleString("zh_CN")));

字符串和Properties


把字符串和Properties对象之间的相互转化抽取出的一些常用方法

//Properties splitArrayElementsIntoProperties(String[] array, String delimiter):
// 把字符串数组中的每一个字符串按照给定的分隔符装配到一个Properties中
String[] strs=new String[]{"key:value","key2:中文"};
Properties ps=StringUtils.splitArrayElementsIntoProperties(strs, ":");
//打印输出:{key=value, key2=中文}
System.out.println(ps);
//Properties splitArrayElementsIntoProperties(String[] array, String delimiter, String charsToDelete)
//把字符串数组中的每一个字符串按照给定的分隔符装配到一个Properties中,并删除指定字符串,比如括号之类的;

字符串和数组之间的基本操作(重要)


该组方法主要是完成字符串和字符串数组之间的基本操作,比如追加,删除,排序等

// String[] addStringToArray(String[] array, String str):把一个字符串添加到一个字符串数组中
// 打印:[a, b, c, d]
System.out.println(Arrays.toString(StringUtils
        .addStringToArray(new String[] { "a", "b", "c" }, "d")));
// String[] concatenateStringArrays(String[] array1, String[]array2):连接两个字符串数组
//打印:[a, b, c, a, b, c, d]
System.out.println(Arrays.toString(StringUtils.concatenateStringArrays(
        new String[] { "a", "b", "c" },
        new String[] { "a", "b", "c","d" })));
//String[] mergeStringArrays(String[] array1, String[] array2):连接两个字符串数组,去掉重复元素
//打印:[a, b, c, d]
System.out.println(Arrays.toString(StringUtils.mergeStringArrays(
        new String[] { "a", "b", "c" },
        new String[] { "a", "b", "c","d" })));
//String[] sortStringArray(String[] array):字符串数组排序
//打印:[a, b, c, d]
System.out.println(Arrays.toString(StringUtils.sortStringArray(new String[]{"d","c","b","a"})));
//String[] toStringArray(Collection<String> collection):把字符串集合变成字符串数组
//String[] toStringArray(Enumeration<String> enumeration):把字符串枚举类型变成字符串数组
//String[] trimArrayElements(String[] array):把字符串数组中所有字符串执行trim功能;
//String[] removeDuplicateStrings(String[] array):去掉给定字符串数组中重复的元素,能保持原顺序;


另外还有关于字符串和数组还有更多的方法:


//String[] split(String toSplit, String delimiter):按照指定字符串分割字符串;
assertArrayEquals(new String[]{"wolfcode","cn"}, StringUtils.split("wolfcode.cn", "."));
//只分割第一次,打印:[www, wolfcode.cn]
System.out.println(Arrays.toString(StringUtils.split("www.wolfcode.cn", ".")));
//String[] tokenizeToStringArray(String str, String delimiters)
//会对每一个元素执行trim操作,并去掉空字符串
//使用的是StringTokenizer完成,
//打印[b, c, d]
System.out.println(Arrays.toString(StringUtils.tokenizeToStringArray("aa,ba,ca,da", "a,")));
//String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens)
//后面两个参数在限定是否对每一个元素执行trim操作,是否去掉空字符串
//String[] delimitedListToStringArray(String str, String delimiter):分割字符串,会把delimiter作为整体分隔符
//打印:[a, b, c, da]
System.out.println(Arrays.toString(StringUtils.delimitedListToStringArray("aa,ba,ca,da", "a,")));
//String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete)
//分割字符串,会把delimiter作为整体分隔符,增加一个要从分割字符串中删除的字符;
//String[] commaDelimitedListToStringArray(String str):使用逗号分割字符串
//是delimitedListToStringArray(str, ",")的简单方法
//Set<String> commaDelimitedListToSet(String str):使用逗号分割字符串,并放到set中去重
//使用LinkedHashSet;
//String collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix)
//将一个集合中的元素,使用前缀,后缀,分隔符拼装一个字符串,前缀后后缀是针对每一个字符串的
String[] arrs=new String[]{"aa","bb","cc","dd"};
assertEquals("{aa},{bb},{cc},{dd}", StringUtils.collectionToDelimitedString(Arrays.asList(arrs),",","{","}"));
//String collectionToDelimitedString(Collection<?> coll, String delim):集合变成指定字符串连接的字符串;
//是collectionToDelimitedString(coll, delim, "", "")的简写;
//String collectionToCommaDelimitedString(Collection<?> coll):集合变成逗号连接的字符串;
//是collectionToDelimitedString(coll, ",");的简写;
//String arrayToDelimitedString(Object[] arr, String delim):数组使用指定字符串连接;
//String arrayToCommaDelimitedString(Object[] arr):使用逗号连接数组,拼成字符串;

StringUtils类中的方法其实真的还是很多,可能平时我们用的比较多的还是一些普通的方法,其实类似文件路径,文件名等相关操作,以前还会专门引入common-io的FilenameUtils等额外的工具类,原来在StringUtils中都有,而且根据其设计的这些方法,我们也能大概的猜出一些方法在Spring中哪些地方可能有用;最后,其中有些方法,还是非常常见的面试题,比如替换字符串,查询子串个数等


SystemPropertyUtils 占位符解析工具类

该类依赖于上面已经说到的PropertyPlaceholderHelper来处理。本类只处理系统默认属性值哦~


该工具类很简单,但是非常的使用。可以很好的利用起来,Spring内部也有非常之多的使用。


在平时的程序开发中,我们也经常会遇到一些痛点,比如规则引擎(公式):A=${B}+${C}+1,这样我们只需要得到B和C的值,然后再放入公式计算即可


占位符在Spring、Tomcat、Maven里都有大量的使用。下面用简单的例子体验一把:

public static String resolvePlaceholders(String text);
//如果标志位为true,则没有默认值的无法解析的占位符将保留原样不被解析 默认为false
public static String resolvePlaceholders(String text, boolean ignoreUnresolvablePlaceholders);


例子:

    public static void main(String[] args) {
        System.out.println(SystemPropertyUtils.resolvePlaceholders("${os.name}/logs/app.log")); //Windows 10/logs/app.log
        //备注:这里如果不传true,如果找不到app.root这个key就会报错哦。传true后找不到也原样输出
        System.out.println(SystemPropertyUtils.resolvePlaceholders("${app.root}/logs/app.log", true)); //${app.root}/logs/app.log
    }



另外,org.springframework.core.io.support.PropertiesLoaderUtils也是Spring提供的加载.properties配置文件的重要工具类之一~


相关文章
|
3天前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
25 6
|
4天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
4天前
|
设计模式 Java 数据库连接
Spring Framework 6 中的设计模式
Spring Framework 6 中的设计模式
17 1
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
6天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
7天前
|
安全 Java 数据安全/隐私保护
使用Spring Security进行Java身份验证与授权
【4月更文挑战第16天】Spring Security是Java应用的安全框架,提供认证和授权解决方案。通过添加相关依赖到`pom.xml`,然后配置`SecurityConfig`,如设置用户认证信息和URL访问规则,可以实现应用的安全保护。认证流程包括请求拦截、身份验证、响应生成和访问控制。授权则涉及访问决策管理器,如基于角色的投票。Spring Security为开发者构建安全应用提供了全面且灵活的工具,涵盖OAuth2、CSRF保护等功能。
|
8天前
|
Java 大数据 云计算
Spring框架:Java后台开发的核心
【4月更文挑战第15天】Spring框架在Java后台开发中占据核心位置,因其控制反转(IoC)、面向切面编程(AOP)、事务管理等特性提升效率和质量。Spring提供数据访问集成、RESTful Web服务和WebSocket支持。优势包括高效开发、灵活扩展、强大生态圈和广泛应用。应用于企业级应用、微服务架构及云计算大数据场景。掌握Spring对Java开发者至关重要。
|
11天前
|
Java 应用服务中间件 Maven
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
10 1
|
19天前
|
存储 安全 Java
Spring Security应用讲解(Java案列演示)
Spring Security应用讲解(Java案列演示)
|
20天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南

热门文章

最新文章