关于Apache Commons-Lang3的使用-程序员宅基地

技术标签: apache  java  StringUtils  Java细节  Commons-lang3  SpringBoot  

关于Apache Commons-Lang3的使用

在日常工作中,我们经常要使用到一些开源工具包,比如String,Date等等。有时候我们并不清楚有这些工具类的存在,造成在开发过程中重新实现导致时间浪费,且开发的代码质量不佳。而apache其实已经提供了系列的工具包给我们使用,只是大多数人,平时没有注意到。我们从使用最多的org.apache.commons.lang3这个jar包开始讲起,lang3这个开源jar包在真实工作中,算是使用最多,运用最广的一个开源包。如何我们彻底的掌握这个包的使用,那么必然给开发工作带来很多好处:节省时间,提高工作效率等等。

  • lang3整体结构的一个概况及各个类的作用
    img

  • StringUtils
    img

  • ArrayUtils
    img

  • BooleanUtils
    img

  • ClassUtils
    img

SpringBoot–实战开发–commons-lang3

一、commons-lang3简介

commons-lang3是Apache的Jakarta commons工程下具有一系列公共基础类。
Apache的Jakarta commons工程项目列表路径:http://commons.apache.org
Commons基础类包基本上是基于JDK API开发而来,依赖微小,可重用性是Jakarta commons的灵魂所在。
Lang组件主要是一些工具类,涉及到数组工具类,字符串工具类,字符工具类,数学方面,时间日期工具类,异常,事件等工具类。

二、Maven依赖

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

三、字符串的处理类(StringUtils)

      //缩短到某长度,用...结尾.其实就是(substring(str, 0, max-3) + "...")
        //public static String abbreviate(String str,int maxWidth)
        StringUtils.abbreviate("abcdefg", 6);// ---"abc..."
        
        //字符串结尾的后缀是否与你要结尾的后缀匹配,若不匹配则添加后缀
        StringUtils.appendIfMissing("abc","xyz");//---"abcxyz"
        StringUtils.appendIfMissingIgnoreCase("abcXYZ","xyz");//---"abcXYZ"
        
        //首字母大小写转换
        StringUtils.capitalize("cat");//---"Cat"
        StringUtils.uncapitalize("Cat");//---"cat"
        
        //字符串扩充至指定大小且居中(若扩充大小少于原字符大小则返回原字符,若扩充大小为 负数则为0计算 )
        StringUtils.center("abcd", 2);//--- "abcd"
        StringUtils.center("ab", -1);//--- "ab"
        StringUtils.center("ab", 4);//---" ab "
        StringUtils.center("a", 4, "yz");//---"yayz"
        StringUtils.center("abc", 7, "");//---"  abc  "
        
        //去除字符串中的"\n", "\r", or "\r\n"
        StringUtils.chomp("abc\r\n");//---"abc"
        
        //判断一字符串是否包含另一字符串
        StringUtils.contains("abc", "z");//---false
        StringUtils.containsIgnoreCase("abc", "A");//---true
        
        //统计一字符串在另一字符串中出现次数
        StringUtils.countMatches("abba", "a");//---2
        
        //删除字符串中的梭有空格
        StringUtils.deleteWhitespace("   ab  c  ");//---"abc"
        
        //比较两字符串,返回不同之处。确切的说是返回第二个参数中与第一个参数所不同的字符串
        StringUtils.difference("abcde", "abxyz");//---"xyz"
        
        //检查字符串结尾后缀是否匹配
        StringUtils.endsWith("abcdef", "def");//---true
        StringUtils.endsWithIgnoreCase("ABCDEF", "def");//---true
        StringUtils.endsWithAny("abcxyz", new String[] {
    null, "xyz", "abc"});//---true
        
        //检查起始字符串是否匹配
        StringUtils.startsWith("abcdef", "abc");//---true
        StringUtils.startsWithIgnoreCase("ABCDEF", "abc");//---true
        StringUtils.startsWithAny("abcxyz", new String[] {
    null, "xyz", "abc"});//---true
        
        //判断两字符串是否相同
        StringUtils.equals("abc", "abc");//---true
        StringUtils.equalsIgnoreCase("abc", "ABC");//---true
        
        //比较字符串数组内的所有元素的字符序列,起始一致则返回一致的字符串,若无则返回""
        StringUtils.getCommonPrefix(new String[] {
    "abcde", "abxyz"});//---"ab"
        
        //正向查找字符在字符串中第一次出现的位置
        StringUtils.indexOf("aabaabaa", "b");//---2
        StringUtils.indexOf("aabaabaa", "b", 3);//---5(从角标3后查找)
        StringUtils.ordinalIndexOf("aabaabaa", "a", 3);//---1(查找第n次出现的位置)
        
        //反向查找字符串第一次出现的位置
        StringUtils.lastIndexOf("aabaabaa", ‘b‘);//---5
        StringUtils.lastIndexOf("aabaabaa", ‘b‘, 4);//---2
        StringUtils.lastOrdinalIndexOf("aabaabaa", "ab", 2);//---1
        
        //判断字符串大写、小写
        StringUtils.isAllUpperCase("ABC");//---true
        StringUtils.isAllLowerCase("abC");//---false
        
        //判断是否为空(注:isBlank与isEmpty 区别)
        StringUtils.isBlank(null);StringUtils.isBlank("");StringUtils.isBlank(" ");//---true
        StringUtils.isNoneBlank(" ", "bar");//---false
        
        StringUtils.isEmpty(null);StringUtils.isEmpty("");//---true
        StringUtils.isEmpty(" ");//---false
        StringUtils.isNoneEmpty(" ", "bar");//---true
        
        //判断字符串数字
        StringUtils.isNumeric("123");//---false
        StringUtils.isNumeric("12 3");//---false (不识别运算符号、小数点、空格……)
        StringUtils.isNumericSpace("12 3");//---true
        
        //数组中加入分隔符号
        //StringUtils.join([1, 2, 3], ‘;‘);//---"1;2;3"
        
        //大小写转换
        StringUtils.upperCase("aBc");//---"ABC"
        StringUtils.lowerCase("aBc");//---"abc"
        StringUtils.swapCase("The dog has a BONE");//---"tHE DOG HAS A bone"
        
        //替换字符串内容……(replacePattern、replceOnce)
        StringUtils.replace("aba", "a", "z");//---"zbz"
        StringUtils.overlay("abcdef", "zz", 2, 4);//---"abzzef"(指定区域)
        StringUtils.replaceEach("abcde", new String[]{
    "ab", "d"},
                new String[]{
    "w", "t"});//---"wcte"(多组指定替换ab->w,d->t)
        
        //重复字符
        StringUtils.repeat(‘e‘, 3);//---"eee"
        
        //反转字符串
        StringUtils.reverse("bat");//---"tab"
        
        //删除某字符
        StringUtils.remove("queued", ‘u‘);//---"qeed"
        
        //分割字符串
        StringUtils.split("a..b.c",.);//---["a", "b", "c"]
        StringUtils.split("ab:cd:ef", ":", 2);//---["ab", "cd:ef"]
        StringUtils.splitByWholeSeparator("ab-!-cd-!-ef", "-!-", 2);//---["ab", "cd-!-ef"]
        StringUtils.splitByWholeSeparatorPreserveAllTokens("ab::cd:ef", ":");//-["ab"," ","cd","ef"]
        
        //去除首尾空格,类似trim……(stripStart、stripEnd、stripAll、stripAccents)
        StringUtils.strip(" ab c ");//---"ab c"
        StringUtils.stripToNull(null);//---null
        StringUtils.stripToEmpty(null);//---""
        
        //截取字符串
        StringUtils.substring("abcd", 2);//---"cd"
        StringUtils.substring("abcdef", 2, 4);//---"cd"
        
        //left、right从左(右)开始截取n位字符
        StringUtils.left("abc", 2);//---"ab"
        StringUtils.right("abc", 2);//---"bc"
        //从第n位开始截取m位字符       n  m
        StringUtils.mid("abcdefg", 2, 4);//---"cdef"
        
        StringUtils.substringBefore("abcba", "b");//---"a"
        StringUtils.substringBeforeLast("abcba", "b");//---"abc"
        StringUtils.substringAfter("abcba", "b");//---"cba"
        StringUtils.substringAfterLast("abcba", "b");//---"a"
        
        StringUtils.substringBetween("tagabctag", "tag");//---"abc"
        StringUtils.substringBetween("yabczyabcz", "y", "z");//---"abc"

四、随机数生成类(RandomStringUtils)

        //随机生成n位数数字
        RandomStringUtils.randomNumeric(n);
        //在指定字符串中生成长度为n的随机字符串
        RandomStringUtils.random(n, "abcdefghijk");
        //指定从字符或数字中生成随机字符串
        System.out.println(RandomStringUtils.random(n, true, false));  
        System.out.println(RandomStringUtils.random(n, false, true));

五、数字类NumberUtils

       //从数组中选出最大值
        NumberUtils.max(new int[] {
     1, 2, 3, 4 });//---4
        //判断字符串是否全是整数
        NumberUtils.isDigits("153.4");//--false
        //判断字符串是否是有效数字
        NumberUtils.isNumber("0321.1");//---false    

六、数组类 ArrayUtils

        //创建数组
        String[] array = ArrayUtils.toArray("1", "2");
        //判断两个数据是否相等,如果内容相同, 顺序相同 则返回 true
        ArrayUtils.isEquals(arr1,arr2);
        //判断数组中是否包含某一对象
        ArrayUtils.contains(arr, "33");
        //二维数组转换成MAP
        Map map = ArrayUtils.toMap(new String[][] {
     
                {
     "RED", "#FF0000" }, {
     "GREEN", "#00FF00" }, {
     "BLUE", "#0000FF" } });

七、日期类DateUtils

        //日期加n天
        DateUtils.addDays(new Date(), n);
        //判断是否同一天
        DateUtils.isSameDay(date1, date2);
        //字符串时间转换为Date
        DateUtils.parseDate(str, parsePatterns);

八、 加密解密类

 // MD5加密
  String encodeStr=DigestUtils.md5Hex(text + key);
 // 密钥进行验证
        String md5Text = md5(text, key);
        if(md5Text.equalsIgnoreCase(md5))
        {
    
            System.out.println("MD5验证通过");
            return true;
        }

九、运行环境的系统信息

getArch();// 获取电脑处理器体系结构 32 bit、64 bit、unknown
getType();// 返回处理器类型 x86、ia64、ppc、unknown
is32Bit();// 检查处理器是否为32位
is64Bit();// 检查处理器是否为64位
isIA64();// 检查是否是英特尔安腾处理器类型
isPPC();// 检查处理器是否是电源PC类型
isX86();// 检查处理器是否是x86类型
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43842093/article/details/121914554

智能推荐

Dijkstra最短路径算法(针对加权有向图)_liujianfeng1984-程序员宅基地

文章浏览阅读5.2k次。indexMinPQ.h#ifndef _INDEX_MIN_PQ_H_#define _INDEX_MIN_PQ_H_#define INDEX_MIN_PQ_TEST 0typedef struct{ int index; double cmpNum;} INDEX_MIN_PQ_DATA;typedef struct{ int _liujianfeng1984

25.WEB安全基础知识一 网站基础知识_web安全中网站基础是指什么-程序员宅基地

文章浏览阅读1.5k次。1、网站基础知识01 网站访问过程域名->ip->服务器-服务器上的网站网站->浏览器02 网站的基础组成部分html(超文本标记语言):定义页面的内容div+css(层叠样式表):定义页面的布局javascript(js脚本语言):处理页面的动作03 网站类型静态网站:没有程序语言而且没有数据库、不可进行交互、后缀多为html/htm/shtml。动态网站:程序语言、逻辑语言、有数据库、可交互、而且后缀多为php/asp/aspx/jsp/伪静态html等。 _web安全中网站基础是指什么

卧槽!你竟然连SpringBoot中的线程池都不会用。。。-程序员宅基地

文章浏览阅读468次。点击上方蓝色“java大数据修炼之道”,选择“设为星标”每晚九点: 技术干货 ???? 必定奉上哈喽,各位新来的小伙伴们,大家好!由于公众号做了改版,为了保证公众号的资源能准时推送到你..._springboot线程池 线程名前缀不起作用

cesium自定义的弹窗 Popup弹窗(可随球放大缩小,移动)_cesium popup-程序员宅基地

文章浏览阅读1.2w次,点赞30次,收藏140次。# 效果图中效果源代码在下面的封装栏中# 基本思路添加一个鼠标左键点击事件,当鼠标点击时,利用vue2.0中 Vue.extend() 动态添加一个dom元素,将DOM元素渲染到cesium容器中,并利用cesium中提供的 viewer.scene.postRender 实时更新坐标位置。思路很简单,接下来我们进行实现。# 实现方法 1. 首先我们需要生成一个球体做我们标记的容器。viewer = new Cesium.Viewer('cesiumContainer',{ _cesium popup

相机相关参数及视野计算_相机视野大小怎么计算-程序员宅基地

文章浏览阅读2.1w次,点赞12次,收藏62次。CCD尺寸就是靶面尺寸,一般是以英尺为单位,是靶面的斜边长。像素尺寸一般以毫米或微米为单位,是靶面的长和宽。以以下参数为例:监测标志物像素按以下公式计算:Di=fDr/Zdx,其中Di为标志物所占像素直径,f为焦距,Dr为标志物直径,Z为实际距离,dx为每一个像素在x方向的物理尺寸。依据上图,算例一:假设焦距200mm,标志物直径1000mm,实际距离500000mm。dx已知为0.0025mm/pixel,则Di=2001000/5000000.0025=160个像素,即标志所占160个像素。算._相机视野大小怎么计算

多元线性回归,岭回归,lasso回归(具体代码(包括调用库代码和手写代码实现)+一点点心得)_多元线性回归代码-程序员宅基地

文章浏览阅读3.8k次,点赞11次,收藏53次。最近数据挖掘导论老师布置了一项作业,主要就是线性回归的实现,笔者之前听过吴恩达的线性回归的网课,但一直没有进行代码的实现,这次正好相对系统的整理一下,方便各位同学的学习,也希望能够对其进行优化,优化的点最后再说。笔者写这篇博客也为了给实验报告打底稿,各位小伙伴2021年9月30号提交报告的时候别跟我实验报告一样啊,打回的话苦的是自己人,到时候我直接一波举报,哈哈哈。不过,发表这篇文章笔者是真的希望给没有实现的同学提供一点小小的帮助或者提供一点小小的想法。一.实验指导书:数据挖掘实验指导书数据预处_多元线性回归代码

随便推点

ARC 107 解题报告 A.数学(多项式相乘的性质)B(枚举、计算贡献)C(思维、并查集)D(DP(非整数转化)E(打表找结论)F(网络流不会))_arc107-程序员宅基地

文章浏览阅读128次。A - Simple Math题目:求∑a=1A∑b=1B∑c=1C\sum_{a=1}^{A}\sum_{b=1}^{B}\sum_{c=1}^{C}a=1∑A​b=1∑B​c=1∑C​的值ll a,b,c;ll inv2;ll solve(){ ll res=((a+1)*a%mod*inv2%mod)%mod; res=((res*(b+1)%mod)*b%mod*inv2%mod)%mod; res=((res*(c+1)%mod)*c%mod*inv2%mod)%mod; re_arc107

中山纪中游记Day12+8.12模拟赛题解-程序员宅基地

文章浏览阅读126次。Part.I 游记今天的题真的难。。。第一题似乎可以用线段树乱搞,然后我就敲了个线段树上去。和暴力拍了将近40分钟后我确定它已经是正确的然后我就交了。结果考完后发现我开数组时开小了。。。于是100→30…QAQ。。。第二题直接打的暴力。。。结果打T了。。。半分也没有。。。第三题勉强拿到了人口普查的分QAQ。。。woc 如果我第一题拿满的话我就rank 2了。。。Part.II 题解...

RTC定时开机闹钟-程序员宅基地

文章浏览阅读856次。  RTC是Real Time Clock的简称,它在硬件电路上单独供电,当系统关机时,CPU和其他外部硬件设备全部掉电,但是RTC仍然继续工作.  HWCR (Hibernate Wakeup Control Register)是一个控制休眠唤醒的寄存器,如果我们要使用休眠状态下RTC唤醒的功能,我们需要打开它的第0位ELAM(RTC Alarm Wakeup enable),当ELAM置1..._rt-186闹钟

linux图形界面装mysql_ubuntu 安装图形界面-程序员宅基地

文章浏览阅读169次。安装基本图形界面:apt-get install xorg gdm ssh你可以用/etc/init.d/gdm start 测试是否成功.一般是肯定成功的,所以你可以不用试了,然后再用’Ctrl + Alt + F1′.切换出去,因为我们还有很多东西要继续安装Gnome桌面:apt-get install gnome-session gnome-menus gnome-panel metacit..._tango-icon-theme

萧子术的第一道编程算法题_算法题:鹏鹏很喜欢吉他,老师让他进行拨琴弦-程序员宅基地

文章浏览阅读94次。标题:用java实现 给定一个整数数组 nums 和一个整数目标值target,请你在该数组中找出 和为目标值的那两个 整数,并返回它们的数组下标。你可以假设每种输入只**会对应一个答案。**但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。大家好!我是 萧子术 这是我第一次写博客。以下内容将记录并督促自己每天写一道算法题。加油~奥利给!``2021年1月16日,地点:家里 天气:阴天这是第一道题目题目内容:给定一个整数数组 nums 和一个整数目标值target,请你在该数组_算法题:鹏鹏很喜欢吉他,老师让他进行拨琴弦

策略模式_为什么策略模式查出来的对象 放进list中会被覆盖-程序员宅基地

文章浏览阅读2.4k次。策略模式定义了算法族,这些算法被分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 这是《深入浅出设计模式》对策略模式的定义,这个定义说得很准确,但是书中的示例却举得不好,让我对策略模式的理解总是“一会儿感觉理解了,一会儿感觉没有理解”。直到看了《Effective Java》第二版第21条,用函数对象表示策略,才终于只是处于“感觉理解了”的状态了。根据自己的理解,写了_为什么策略模式查出来的对象 放进list中会被覆盖