大家好,我是大彬 在平时开发过程中,经常会重复造轮子,在同一个项目里面,可能会出现各种各样每个人自己实现的工具类,这样不仅降低了开发效率,而且代码也不好维护。 今天趁着国庆假期,整理了一些常用的工具类,在这里给大家分享一下,希望对大家有所帮助字符串工具类 首先介绍一下commonslang3的一个字符串工具类StringUtils,常用方法如下: 1、isEmpty()判断字符串是否为空。publicclassStringUtilsTest{publicstaticvoidmain(String〔〕args){Stringname大彬;System。out。println(StringUtils。isEmpty(name));}} 2、isBlank()判断字符串是否为空,如果字符串都是空格,也认为是空。publicclassStringUtilsTest{publicstaticvoidmain(String〔〕args){System。out。println(StringUtils。isBlank());}true} 3、strip()将字符串左右两边的空格删除。publicclassStringUtilsTest{publicstaticvoidmain(String〔〕args){Stringname大彬;System。out。println(StringUtils。strip(name));}} 4、join(Object〔〕array,Stringseparator)将数组拼接成字符串,可以设置分隔符。publicclassStringUtilsTest{publicstaticvoidmain(String〔〕args){String〔〕nameArr{大彬1,大彬2,大彬3};System。out。println(StringUtils。join(nameArr,,));}output大彬1,大彬2,大彬3} 5、replace(Stringtext,StringsearchString,Stringreplacement)替换字符串关键字。publicclassStringUtilsTest{publicstaticvoidmain(String〔〕args){System。out。println(StringUtils。replace(hello,大彬,hello,hi));}outputhi,大彬}日期工具类 SimpleDateFormat不是线程安全的,在多线程环境会有并发安全问题,不推荐使用。这里大彬推荐另一个时间工具类DateFormatUtils,用于解决日期类型和字符串的转化问题,DateFormatUtils不会有线程安全问题。 Date转化为字符串:publicclassDateFormatUtilsTest{publicstaticvoidmain(String〔〕args)throwsParseException{StringdateStrDateFormatUtils。format(newDate(),yyyyMMdd);System。out。println(dateStr);}output20211001} 字符串转Date,可以使用commonslang3下时间工具类DateUtils。publicclassDateUtilsTest{publicstaticvoidmain(String〔〕args)throwsParseException{StringdateStr2021100115:00:00;DatedateDateUtils。parseDate(dateStr,yyyyMMddHH:mm:ss);System。out。println(date);}outputFriOct0115:00:00CST2021} Java8之后,将日期和时间分为LocateDate、LocalTime和LocalDateTime,相比Date类,这些类都是final类型的,不能修改,也是线程安全的。 使用LocateDateTime获取年月日:publicclassLocalDateTimeTest{publicstaticvoidmain(String〔〕args){LocalDateTimenowLocalDateTime。now();System。out。println(now。getYear());System。out。println(now。getMonthValue());System。out。println(now。getDayOfMonth());}output2021101} 使用LocalDateTime进行字符串和日期的转化:publicclassLocalDateTimeTest1{publicstaticvoidmain(String〔〕args){StringdatePatternyyyyMMddHH:mm:将字符串转化为日期LocalDateTimedateTimeLocalDateTime。parse(2021100116:00:00,DateTimeFormatter。ofPattern(datePattern));System。out。println(dateTime);将LocalDateTime格式化为字符串StringdateStrDateTimeFormatter。ofPattern(datePattern)。format(dateTime);System。out。println(dateStr);}output20211001T16:002021100116:00:00}集合工具类 在开发接口功能的时候,经常需要对入参做判空处理:if(nulllistlist。isEmpty()){} 虽然代码很简单,但是也比较容易写出抛空指针异常的代码。推荐使用commonscollections提供的工具类,使用简单,并且不会出错。publicclassCollectionUtilsTest{publicstaticvoidmain(String〔〕args){ListStringnameListnewArrayList();if(CollectionUtils。isEmpty(nameList)){System。out。println(namelistisempty);}}} Map集合判空使用commonscollections下的MapUtils工具类。数组判空需要使用commonslang下的ArrayUtils。map判空if(MapUtils。isEmpty(map)){}数组判空if(ArrayUtils。isEmpty(array)){} 此外,还可以使用CollectionUtils对基础数据类型和String类型的集合进行取交集、并集和差集的处理。publicclassCollectionUtilsTest1{publicstaticvoidmain(String〔〕args){String〔〕array1newString〔〕{1,2,3,4};String〔〕array2newString〔〕{4,5,6,7};ListStringlist1Arrays。asList(array1);ListStringlist2Arrays。asList(array2);并集unionSystem。out。println(CollectionUtils。union(list1,list2));output:〔1,2,3,4,5,6,7〕交集intersectionSystem。out。println(CollectionUtils。intersection(list1,list2));output:〔4〕}}数组工具类 ArrayUtils是专门处理数组的类,方便进行数组操作,不再需要各种循环操作。 数组合并操作:publicclassArrayUtilsTest{publicstaticvoidmain(String〔〕args){合并数组String〔〕arr1newString〔〕{大彬1,大彬2};String〔〕arr2newString〔〕{大彬3,大彬4};String〔〕arr3ArrayUtils。addAll(arr1,arr2);System。out。println(ArrayUtils。toString(arr3));}output{大彬1,大彬2,大彬3,大彬4}} 数组clone操作:publicclassArrayUtilsTest1{publicstaticvoidmain(String〔〕args){合并数组String〔〕arr1newString〔〕{大彬1,大彬2};String〔〕arr2ArrayUtils。clone(arr1);arr1〔1〕大彬;System。out。println(arr1:ArrayUtils。toString(arr1));System。out。println(arr2:ArrayUtils。toString(arr2));}outputarr1:{大彬1,大彬}arr2:{大彬1,大彬2}} 将数组原地翻转:author:程序员大彬time:2021100119:29publicclassArrayUtilsTest2{publicstaticvoidmain(String〔〕args){将arr1翻转String〔〕arr1newString〔〕{大彬1,大彬2};ArrayUtils。reverse(arr1);System。out。println(ArrayUtils。toString(arr1));}output{大彬2,大彬1}}Json工具类 Jackson是当前用的比较广泛的,用来序列化和反序列化json的开源框架。Jackson优点如下:Jackson所依赖的jar包较少,简单易用;与其他json的框架如Gson相比,Jackson解析大的json文件速度比较快;Jackson运行时占用内存比较低,性能比较好;Jackson比较灵活,容易进行扩展和定制。 Jackson的核心模块由三部分组成。jacksoncore,核心包,提供基于流模式解析的相关API;jacksonannotations,注解包,提供标准注解功能;jacksondatabind,数据绑定包,提供基于对象绑定(ObjectMapper)解析的相关API和树模型(JsonNode)解析的相关API,这两个解析方式都依赖基于流模式解析的API。 下面看看Jackson常用的注解。JsonProperties。此注解指定一个属性用于json映射,默认情况下映射的JSON属性与注解的属性名称相同,可以使用此注解的value值修改json属性名。此外,该注解还有一个index属性,用于指定生成json属性的顺序。JsonIgnore。用于排除某个属性,使得该属性不会被Jackson序列化和反序列化。JsonFormat。指定属性在序列化时转换成指定的格式。例如:JsonFormat(patternyyyyMMdd),表明属性在序列化时,会转换成yyyyMMdd这样的格式。JsonPropertyOrder。作用与JsonProperty的index属性类似,用于指定属性序列化时的顺序。 接下来看一下Jackson怎么使用。 首先要使用Jackson提供的功能,需要先添加依赖:dependencygroupIdcom。fasterxml。jackson。coregroupIdjacksondatabindartifactIdversion2。9。1versiondependency 当添加jacksondatabind之后,jacksoncore和jacksonannotations也会被添加到Java项目工程中。 先介绍下对象绑定ObjectMapper的使用。如下代码,ObjectMapper通过writeValue方法将对象序列化为json,并将json存储成String格式。通过readValue方法将json反序列化为对象。publicclassJsonUtilsTest{publicstaticvoidmain(String〔〕args)throwsIOException{ObjectMappermappernewObjectMapper();PersonpersonnewPerson();person。setName(大彬);person。setAge(18);对象序列化为jsonStringjsonStrmapper。writerWithDefaultPrettyPrinter()。writeValueAsString(person);System。out。println(jsonStr);json反序列化为对象PersondeserializedPersonmapper。readValue(jsonStr,Person。class);System。out。println(deserializedPerson);}output{name:大彬,age:18}Person(name大彬,age18)} ObjectMapper既可以处理简单数据类型,也能处理对象类型,但是有些情况下,比如我只想要json里面某一个属性的值,或者我不想创建一个POJO与之对应,只是临时使用,这时使用树模型JsonNode可以解决这些问题。 将Object转换为JsonNode:publicclassJsonNodeTest{publicstaticvoidmain(String〔〕args){ObjectMapperobjectMappernewObjectMapper();PersonpersonnewPerson();person。setName(大彬);person。setAge(18);JsonNodepersonJsonNodeobjectMapper。valueToTree(person);取出name属性的值System。out。println(personJsonNode。get(name));}output大彬} 将JsonNode转换为Object:publicclassJsonNodeTest1{publicstaticvoidmain(String〔〕args)throwsIOException{ObjectMapperobjectMappernewObjectMapper();StringpersonJson{name:大彬,age:18};JsonNodepersonJsonNodeobjectMapper。readTree(personJson);PersonpobjectMapper。treeToValue(personJsonNode,Person。class);System。out。println(p);}outputPerson(name大彬,age18)}文件工具类 在平时工作当中,经常会遇到很多文件的操作,借助commonsio的FileUtils可以大大简化文件操作的开发工作量。 首先引入commonsio依赖:dependencygroupIdcommonsiogroupIdcommonsioartifactIdversion2。5versiondependency 读文件操作代码如下,其中,:publicclassFileUtilsTest{publicstaticvoidmain(String〔〕args)throwsIOException{输出:大彬最强System。out。println(FileUtils。readFileToString(newFile(E:demo。txt),UTF8));readLines返回ListString输出〔大彬,最强〕System。out。println(FileUtils。readLines(newFile(E:demo。txt),UTF8));}} 写文件操作:publicclassFileUtilsTest1{publicstaticvoidmain(String〔〕args)throwsIOException{第一个参数File对象第二个参数是写入的字符串第三个参数是编码方式第四个参数是是否追加模式FileUtils。writeStringToFile(newFile(E:Demo。txt),大彬,UTF8,true);}} 删除文件文件夹操作:FileUtils。deleteDirectory(newFile(E:test));FileUtils。deleteQuietly(newFile(E:test));永远不会抛出异常,传入的路径是文件夹,则会删除文件夹下所有文件参考链接 https:juejin。cnpost6844904154113146894 https:www。cnblogs。comguanbin529p11488869。html