范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

超级实用的Java工具类

  大家好,我是大彬~
  在平时开发过程中,经常会重复"造轮子",在同一个项目里面,可能会出现各种各样每个人自己实现的工具类,这样不仅降低了开发效率,而且代码也不好维护。
  今天趁着国庆假期,整理了一些 常用的工具类 ,在这里给大家分享一下,希望对大家有所帮助~ 字符串工具类
  首先介绍一下 commons-lang3 的一个字符串工具类StringUtils ,常用方法如下:
  1、 isEmpty()  判断字符串是否为空。public class StringUtilsTest {     public static void main(String[] args) {         String name = "大彬";         System.out.println(StringUtils.isEmpty(name));     } }
  2、 isBlank()  判断字符串是否为空,如果字符串都是空格,也认为是空。public class StringUtilsTest {     public static void main(String[] args) {         System.out.println(StringUtils.isBlank("  "));     }     /**      * true      */ }
  3、 strip()  将字符串左右两边的空格删除。public class StringUtilsTest {     public static void main(String[] args) {         String name = " 大彬 ";         System.out.println(StringUtils.strip(name));     } }
  4、 join(Object[] array, String separator)  将数组拼接成字符串,可以设置分隔符。public class StringUtilsTest {     public static void main(String[] args) {         String[] nameArr = {"大彬1", "大彬2", "大彬3"};         System.out.println(StringUtils.join(nameArr, ","));     }     /**      * output      * 大彬1,大彬2,大彬3      */ }
  5、 replace(String text, String searchString, String replacement) 替换字符串关键字。public class StringUtilsTest {     public static void main(String[] args) {         System.out.println(StringUtils.replace("hello, 大彬", "hello", "hi"));     }     /**      * output      * hi, 大彬      */ } 日期工具类
  SimpleDateFormat  不是线程安全的,在多线程环境会有并发安全问题,不推荐使用。这里大彬推荐另一个时间工具类DateFormatUtils ,用于解决日期类型和字符串的转化问题,DateFormatUtils 不会有线程安全问题。
  Date 转化为字符串: public class DateFormatUtilsTest {     public static void main(String[] args) throws ParseException {         String dateStr = DateFormatUtils.format(new Date(), "yyyy-MM-dd");         System.out.println(dateStr);     }     /**      * output      * 2021-10-01      */ }
  字符串转 Date,可以使用 commons-lang3  下时间工具类DateUtils。public class DateUtilsTest {     public static void main(String[] args) throws ParseException {         String dateStr = "2021-10-01 15:00:00";         Date date = DateUtils.parseDate(dateStr, "yyyy-MM-dd HH:mm:ss");         System.out.println(date);     }     /**      * output      * Fri Oct 01 15:00:00 CST 2021      */ }
  Java8之后,将日期和时间分为 LocateDate 、LocalTime 和LocalDateTime ,相比Date 类,这些类都是final类型的,不能修改,也是线程安全的。
  使用 LocateDateTime 获取年月日:public class LocalDateTimeTest {     public static void main(String[] args) {         LocalDateTime now = LocalDateTime.now();         System.out.println(now.getYear());         System.out.println(now.getMonthValue());         System.out.println(now.getDayOfMonth());     }     /**      * output      * 2021      * 10      * 1      */ }
  使用 LocalDateTime 进行字符串和日期的转化:public class LocalDateTimeTest1 {     public static void main(String[] args) {         String datePattern = "yyyy-MM-dd HH:mm:ss";         //将字符串转化为日期         LocalDateTime dateTime = LocalDateTime.parse("2021-10-01 16:00:00", DateTimeFormatter.ofPattern(datePattern));         System.out.println(dateTime);         //将LocalDateTime格式化为字符串         String dateStr = DateTimeFormatter.ofPattern(datePattern).format(dateTime);         System.out.println(dateStr);     }     /**      * output      * 2021-10-01T16:00      * 2021-10-01 16:00:00      */ } 集合工具类
  在开发接口功能的时候,经常需要对入参做判空处理: if (null == list || list.isEmpty()) { }
  虽然代码很简单,但是也比较容易写出抛空指针异常的代码。推荐使用 commons-collections 提供的工具类,使用简单,并且不会出错。public class CollectionUtilsTest {     public static void main(String[] args) {         List nameList = new ArrayList<>();          if (CollectionUtils.isEmpty(nameList)) {             System.out.println("name list is empty");         }     } }
  Map 集合判空使用commons-collections 下的MapUtils 工具类。数组判空需要使用commons-lang 下的ArrayUtils 。//map判空 if (MapUtils.isEmpty(map)) {  } //数组判空 if (ArrayUtils.isEmpty(array)) {   }
  此外,还可以使用 CollectionUtils 对基础数据类型和String 类型的集合进行取交集、并集和差集的处理。public class CollectionUtilsTest1 {     public static void main(String[] args) {         String[] array1 = new String[] { "1", "2", "3", "4"};         String[] array2 = new String[] { "4", "5", "6", "7" };         List list1 = Arrays.asList(array1);         List list2 = Arrays.asList(array2);          //并集 union         System.out.println(CollectionUtils.union(list1, list2));         //output: [1, 2, 3, 4, 5, 6, 7]          //交集 intersection         System.out.println(CollectionUtils.intersection(list1, list2));         //output:[4]     } } 数组工具类
  ArrayUtils  是专门处理数组的类,方便进行数组操作,不再需要各种循环操作。
  数组合并操作: public class ArrayUtilsTest {     public static void main(String[] args) {         //合并数组         String[] arr1 = new String[]{"大彬1", "大彬2"};         String[] arr2 = new String[]{"大彬3", "大彬4"};         String[] arr3 = ArrayUtils.addAll(arr1, arr2);         System.out.println(ArrayUtils.toString(arr3));     }     /**      * output      * {大彬1,大彬2,大彬3,大彬4}      */ }
  数组 clone 操作:public class ArrayUtilsTest1 {     public static void main(String[] args) {         //合并数组         String[] arr1 = new String[]{"大彬1", "大彬2"};         String[] arr2 = ArrayUtils.clone(arr1);         arr1[1] = "大彬";         System.out.println("arr1:" + ArrayUtils.toString(arr1));         System.out.println("arr2:" + ArrayUtils.toString(arr2));     }     /**      * output      * arr1:{大彬1,大彬}      * arr2:{大彬1,大彬2}      */ }
  将数组原地翻转: /**  * @author: 程序员大彬  * @time: 2021-10-01 19:29  */ public class ArrayUtilsTest2 {     public static void main(String[] args) {         //将arr1翻转         String[] arr1 = new String[]{"大彬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 的核心模块由三部分组成。 jackson-core,核心包,提供基于流模式解析的相关 API; jackson-annotations,注解包,提供标准注解功能; jackson-databind ,数据绑定包, 提供基于对象绑定( ObjectMapper ) 解析的相关 API 和树模型(JsonNode)解析的相关 API ,这两个解析方式都依赖基于流模式解析的 API。
  下面看看 Jackson 常用的注解。@JsonProperties 。此注解指定一个属性用于json映射,默认情况下映射的JSON属性与注解的属性名称相同,可以使用此注解的value 值修改json属性名。此外,该注解还有一个index 属性,用于指定生成json属性的顺序。@JsonIgnore 。用于排除某个属性,使得该属性不会被Jackson序列化和反序列化。JsonFormat 。指定属性在序列化时转换成指定的格式。例如:@JsonFormat(pattern = "yyyy-MM-dd") ,表明属性在序列化时,会转换成yyyy-MM-dd 这样的格式。@JsonPropertyOrder 。作用与@JsonProperty 的index 属性类似,用于指定属性序列化时的顺序。
  接下来看一下 Jackson 怎么使用。
  首先要使用 Jackson 提供的功能,需要先添加依赖:      com.fasterxml.jackson.core     jackson-databind     2.9.1 
  当添加  jackson-databind  之后, jackson-core  和 jackson-annotations  也会被添加到 Java 项目工程中。
  先介绍下对象绑定 ObjectMapper 的使用。如下代码,ObjectMapper  通过writeValue  方法 将对象序列化为 json,并将 json 存储成 String 格式。通过 readValue  方法将 json 反序列化为对象。public class JsonUtilsTest {     public static void main(String[] args) throws IOException {         ObjectMapper mapper = new ObjectMapper();         Person person = new Person();         person.setName("大彬");         person.setAge(18);         //对象序列化为json         String jsonStr = mapper.writerWithDefaultPrettyPrinter()                 .writeValueAsString(person);         System.out.println(jsonStr);         //json反序列化为对象         Person deserializedPerson = mapper.readValue(jsonStr, Person.class);         System.out.println(deserializedPerson);     }     /**      * output      * {      *   "name" : "大彬",      *   "age" : 18      * }      * Person(name=大彬, age=18)      */ }
  ObjectMapper 既可以处理简单数据类型,也能处理对象类型,但是有些情况下,比如我只想要 json 里面某一个属性的值,或者我不想创建一个POJO 与之对应,只是临时使用,这时使用树模型 JsonNode 可以解决这些问题。
  将 Object 转换为JsonNode :public class JsonNodeTest {     public static void main(String[] args) {         ObjectMapper objectMapper = new ObjectMapper();          Person person = new Person();         person.setName("大彬");         person.setAge(18);          JsonNode personJsonNode = objectMapper.valueToTree(person);         //取出name属性的值         System.out.println(personJsonNode.get("name"));     }     /**      * output      * "大彬"      */ }
  将 JsonNode 转换为Object :public class JsonNodeTest1 {     public static void main(String[] args) throws IOException {         ObjectMapper objectMapper = new ObjectMapper();         String personJson = "{ "name" : "大彬", "age" : 18 }";         JsonNode personJsonNode = objectMapper.readTree(personJson);          Person p = objectMapper.treeToValue(personJsonNode, Person.class);         System.out.println(p);     }     /**      * output      * Person(name=大彬, age=18)      */ } 文件工具类
  在平时工作当中,经常会遇到很多文件的操作,借助 commons-io 的FileUtils 可以大大简化文件操作的开发工作量。
  首先引入 commons-io 依赖:     commons-io     commons-io     2.5 
  读文件操作代码如下,其中,: public class FileUtilsTest {     public static void main(String[] args) throws IOException {         //输出:         //大彬         //最强         System.out.println(FileUtils.readFileToString(new File("E:/demo.txt"), "UTF-8"));         //readLines返回List         // 输出[大彬, 最强]         System.out.println(FileUtils.readLines(new File("E:/demo.txt"), "UTF-8"));     } }
  写文件操作: public class FileUtilsTest1 {     public static void main(String[] args) throws IOException {         //第一个参数File对象         //第二个参数是写入的字符串         //第三个参数是编码方式         //第四个参数是是否追加模式         FileUtils.writeStringToFile(new File("E://Demo.txt"), "大彬", "UTF-8",true);     } }
  删除文件/文件夹操作: FileUtils.deleteDirectory(new File("E://test")); FileUtils.deleteQuietly(new File("E://test")); //永远不会抛出异常,传入的路径是文件夹,则会删除文件夹下所有文件 参考链接
  https://juejin.cn/post/6844904154113146894
  https://www.cnblogs.com/guanbin-529/p/11488869.html

大战FBI说要收购滴滴!币圈第一镰刀又来了孙迟但到。孙宇晨又来了,带着自己的祖传的100亿,又来了。经历前不久FBI调查的风波之后,孙宇晨再一次语不惊人死不休。3月12日,孙宇晨在个人微博孙哥回来了上发文称,打算花100亿罗永浩的创业观创业,哪些人适合,哪些人不适合锤子科技创始人罗永浩一直是个热门人物。前两天他出来辟谣,说自己的真还传尚未迎来结局,6个亿还没还完,还完肯定会在第一时间官宣。耽误大家几分钟时间,不聊老罗还钱的事,聊聊老罗的创业观iPhoneSE3,升级了电池和处理器,我为什么还是不建议你买?三月初,苹果召开了春季发布会,发布了多款新品,其中就有iPhoneSE3。这款完全跟前代外观一模一样的产品,而且还隔了两年才推出。这款机器的外观不变,屏幕玻璃换成超瓷晶面板,其它设2022年冰箱超全选购攻略!买冰箱看这篇就够了艾瑞巴蒂大家好,我是小泽,又见面啦!冰箱对于我们每个人来说是再熟悉不过的大家电,尤其是这两年在疫情的影响之下,像下面这样的场景应该很多人都见怪不怪了,当公共灾害来临导致我们无法及时小米红米手机此播放列表模式仅支持列表循环的解决方法2022年三月份手机推送的MIUI12。5。8。0稳定版,原先不准备更新的,实在受不了天天提醒,于是更新了,更新完之后就开始提示此播放列表模式仅支持列表循环,一开始以为是某信app当下最热销的中大型SUV,一个月卖了8370台,带你看理想ONE翻阅汽车销量时,突然发现一辆自主新能源车的表现有点出乎我的意料,这款车就是一直以来讨论度都不低的理想ONE。之前只知道这款车价格不便宜,但谁承想它的销量表现竟然能够这么好。根据中汽市场监管总局赋予科技领军人才更大人财物支配权和技术路线决策权市场监管总局赋予科技领军人才更大人财物支配权和技术路线决策权财联社3月18日电,市场监管总局发布十四五市场监管科技发展规划提出,加强国家科学技术奖励等高水平成果培育,开展市场监管科未来到底是电的天下,还是氢的天下?谁更环保?相信不用我多说,从目前国家对于新能源领域的投入就能看出来这已经是大势所趋了,而且无论是从规模还是群众接受度来说,纯电动车似乎就是未来汽车的最终形态。对于电动车的未来前景,可以说是一数字货币的到来,将会是真真正正的天下无贼我一直强调,互联网经济时代已经过去,马上要到来的是数字经济时代,其中非常核心的内容就是形成以央行数字货币为主流的新的货币体系,对于我们国家来说就是数字人民币。所以,我认为未来最大的混动汽车注定是过渡品,8年后算一笔账,发现省油却不省钱92号汽油迈入8元时代,燃油车主看到新能源车型1公里花费不到1毛钱,是不是觉得它很香?如果你真这样认为,那就错了,从经济角度来看,无论是纯电动车还是插电混动油电混动增程式这些车型都联想的电脑值得买吗?现在小米华为都出了笔记本电脑,该如何选?联想电脑如果看销量还是可以的,性能其实真的不太好。我的上一台笔记本电脑就是IdeaPad110用了不到一年系统蹦了,到联想售后,收费不说了,服务还很差,没办法,谁让咱买了联的呢,不乐享音乐护眼畅读海信TOUCH音乐阅读器悦耳阅心新体验一本书,一副耳机,足够我们度过一个悠闲的午后。以文字陶冶情操,用音乐舒缓心灵。为此,海信推出音乐阅读器TOUCH,它不仅拥有电子书阅读器的所有功能,还集成了音乐播放功能,可以为用户海信TOUCH5月20日震撼来袭音阅星推官王博文李歌洋邀你共同见证全球首款音乐阅读器海信TOUCH将于5月20日震撼来袭,特邀海信TOUCH音阅星推官王博文与你一起遇见更大的视界,与音阅星推官李歌洋一起读别人的故事,阅自己的人生!海信TOUCH音宝能汽车具备强大研发实力的同时,还注重人才引进如今,新一轮科技革命和产业变革蓬勃发展,汽车产品形态交通出行模式能源消费结构正在发生深刻变革,为新能源汽车产业提供了前所未有的发展机遇。宝能汽车以科技创新驱动发展,集聚人才,聚焦新5月20日发布!全新旗舰音乐阅读器海信Touch开启京东盲约日前,海信手机京东官方自营旗舰店上线了新品盲约活动,透露将于5月20日发布旗舰音乐阅读产品海信Touch,这是继全球首款5G阅读手机A7上市并大获成功之后,海信推出的全新护眼阅读产民生宝能战略不断落地,宝能系企业中炬高新持续赋能砥砺前行29年,宝能集团始终坚持实业报国理想,全面推进制造宝能科技宝能民生宝能三大战略。就民生宝能战略而言,如今不断推进,其中宝能系企业中炬高新便始终在发挥出强劲赋能,不断贡献力量护眼阅读与HiFi音乐相伴海信TOUCH休闲读书好帮手阅读是一个好习惯,不仅仅能够扩展我们的知识,对于娱乐消遣来说,也是一个非常合适的选择。不过,手机屏幕因为亮度以及发光材料等问题,护眼阅读是个难题。同时,听音乐歌曲也是日常消遣的好方打造全民阅读新风尚海信阅读手机京东4。23悦读节豪礼送不停伴随国民阅读习惯的改变,当今社会已经进入全新数字阅读时代,海信阅读手机专为护眼阅读而生,近日推出4。23全民悦读节福利活动,助推全民阅读新风尚,购机畅享多重豪礼送不停!全场6期免息海信TOUCH小身材大能量属于读书人的音阅盛宴来了读书可以陶冶一个人的心灵,人们说好看的皮囊千篇一律,有趣的灵魂万里挑一。触摸智者的灵魂,呼吸自然的气息,体悟人世的冷暖当然是需要一件好的阅读工具,海信新推出的TOUCH音乐阅读器就618海信护眼阅读日至高立减400元新品海信TOUCH火热抢购中618年中狂欢进行时,海信手机京东官方旗舰店护眼阅读日活动钜惠来袭!超级新品海信TOUCH音乐阅读器火热开抢,全场护眼阅读产品享最高立减400元超值优惠力度,更有签到赢京东读书VI这款黑科技产品,一直被模仿,从未被超越你有被假货坑过的经历吗?为了能便宜几百块钱,我通过某平台的非官方店铺入手了一台戴森吹风机。早听闻戴森吹风机颜值和实力并存,但第一次上手的时候,我整个人都呆住了。使用体验和我之前80海信TOUCH音乐阅读器5月20日即将发布真机亮相引发网友期待继在京东开启盲约活动之后,日前海信全新音乐阅读器海信TOUCH正式官宣,将于5月20日发布。在官方发布的宣传海报和预热视频当中,又透露了不少新的信息,而随着真机的亮相,这款阅读器愈
华为Mate40X入网,支持5GHarmonyOS25000mAh,过于意外现在的华为确实备受关注,主要是有很多人在等着华为发布5G新机,因为在很多人心中,国产中最能体现实力的手机品牌还是华为。华为有一个很强大的系列,也就是Mate系列,这个系列基本上是三8点1氪丨消息称快手年底正在裁员格力被判赔偿奥克斯1。67亿元国行AppleWatch支持心电图上市进行时保时捷据报道,大众汽车筹备保时捷品牌IPO。(新浪科技)东芯股份36氪获悉,东芯股份发布公告称,公司股票将于2021年12月10日在上海证券交易所科创板上市。大公司消息称互联网寒冬来临,快手裁员高薪员工,网友这回更追不上抖音了今年的冬天对于互联网来说似乎有些过冷了,进入12月的第一天,爱奇艺就被爆出正在大幅裁员,裁员比例高达2040,而就在近日,短视频赛道的巨头快手也身陷裁员风波,人们不禁要问,各家互联百度将发布元宇宙产品希壤,负责人尚处于初期产业探索阶段澎湃财讯12月10日,百度宣布将于12月27日发布元宇宙产品希壤,届时百度Create2021(百度AI开发者大会)将在希壤APP举办。这是国内首次在元宇宙中举办的大会,可同时容纳武汉大学撤销鸡肋专业,师生看法出奇一致,对高考有啥影响随着社会的发展和时代的进步,高等教育也发生了翻天覆地的变化,其中之一就是各高校在专业上的调整。不少高校在电子信息技术飞速发展的前提下,新增了一些新工科专业,例如大数据云计算人工智能新消费科技品牌营销方法论演讲者张炎知乎商业市场总经理大家好,我是知乎张炎。平时在和朋友交流时,经常会有朋友跟我说,你们知乎真是个硬核的平台。我刚才在台下听前面几位嘉宾包括圆桌分享,我发现在场的嘉宾们才是真德国测出十佳手机苹果未上榜,华为仍在,中国4品牌6席领榜Oneplus9Pro和小米11Ultra根据德国专业测试机构对市面上几乎所有智能手机的详实测试结果,苹果的最新iPhone13系列仍旧未能跻身前十。在智能手机前十名中,三星和华为微信吞噬了整个世界李笑来老师说微信吞噬了整个世界整个世界是由经济构成的微信是一个经济世界。可见微信在当下影响着整个世界的变化。微信是一个在中国安装率甚至超过了100的应用,有手机的人都注册了微信,并雪梨被曝不给员工交社保社保断缴有什么影响?这些资格可能清零据中新经纬官方微博12月10日消息,有网友爆料,雪梨的店铺现在没什么流量,公司1600个员工,一个月发工资都要1600万,还有房租水电开销,还要买数据一年一个亿。自从出事后,雪梨已2022年中国元宇宙行业市场前景及投资研究预测报告中商情报网讯近期,元宇宙概念一出,立即引发人们广泛关注与热议。元宇宙是指利用科技手段进行链接与创造的,并将虚拟世界与现实世界在经济系统社交系统身份系统上密切融合的数字生活空间,强调雷军对金山做了什么?组织变革对于企业来说,已经不是一道选择题,而是一道必答题,企业家更多应思考如何能确保组织变革的顺利推动,而非变革的必要性。2021年,在小米成立十周年主题演讲中,雷军做了我的梦想我