精华内容
下载资源
问答
  • 本资源包含 commons-lang3-3.7.jar commons-lang-2.6.jar,适用不同版本
  • StringUtils在commons-lang3和commons-lang中的区别

    万次阅读 多人点赞 2017-07-12 23:50:37
    最近经常需要对String做一些判断处理,于是就用到了Apache提供的StringUtils这个工具类,用的时候发现有两个不同的版本,一个版本位于org.apache.commons.lang下面,另一个则位于org.apache.commons.lang3下面。...

    最近经常需要对String做一些判断和处理,于是就用到了Apache提供的StringUtils这个工具类,用的时候发现有两个不同的版本,一个版本位于org.apache.commons.lang下面,另一个则位于org.apache.commons.lang3下面。

    查了一下资料,lang3是Apache Commons 团队发布的工具包,要求jdk版本在1.5以上,相对于lang来说完全支持java5的特性,废除了一些旧的API。该版本无法兼容旧有版本,于是为了避免冲突改名为lang3。这些东西就不再细说了,我们来看看StringUtils中常用的一些方法有什么改变吧。

    PS.本文的java版本为1.8。
    

    1.isEmpty、isNotEmpty、isBlank、isNotBlank

    先贴源码

        //lang
        public static boolean isEmpty(String str) {
            return str == null || str.length() == 0;
        }
    
        public static boolean isNotEmpty(String str) {
            return !isEmpty(str);
        }
    
        public static boolean isBlank(String str) {
            int strLen;
            if(str != null && (strLen = str.length()) != 0) {
                for(int i = 0; i < strLen; ++i) {
                    if(!Character.isWhitespace(str.charAt(i))) {
                        return false;
                    }
                }
    
                return true;
            } else {
                return true;
            }
        }
    
        public static boolean isNotBlank(String str) {
            return !isBlank(str);
        }
        //lang3
        public static boolean isEmpty(CharSequence cs) {
            return cs == null || cs.length() == 0;
        }
    
        public static boolean isNotEmpty(CharSequence cs) {
            return !isEmpty(cs);
        }
    
        public static boolean isBlank(CharSequence cs) {
            int strLen;
            if(cs != null && (strLen = cs.length()) != 0) {
                for(int i = 0; i < strLen; ++i) {
                    if(!Character.isWhitespace(cs.charAt(i))) {
                        return false;
                    }
                }
    
                return true;
            } else {
                return true;
            }
        }
    
        public static boolean isNotBlank(CharSequence cs) {
            return !isBlank(cs);
        }

    可以看到这几个方法逻辑毫无变化,只是参数类型变了,由String变为CharSequence。那么这个CharSequence是什么呢?我们看看它的源码:

    /**
     * A <tt>CharSequence</tt> is a readable sequence of <code>char</code> values. This
     * interface provides uniform, read-only access to many different kinds of
     * <code>char</code> sequences.
     * A <code>char</code> value represents a character in the <i>Basic
     * Multilingual Plane (BMP)</i> or a surrogate. Refer to <a
     * href="Character.html#unicode">Unicode Character Representation</a> for details.
     *
     * <p> This interface does not refine the general contracts of the {@link
     * java.lang.Object#equals(java.lang.Object) equals} and {@link
     * java.lang.Object#hashCode() hashCode} methods.  The result of comparing two
     * objects that implement <tt>CharSequence</tt> is therefore, in general,
     * undefined.  Each object may be implemented by a different class, and there
     * is no guarantee that each class will be capable of testing its instances
     * for equality with those of the other.  It is therefore inappropriate to use
     * arbitrary <tt>CharSequence</tt> instances as elements in a set or as keys in
     * a map. </p>
     *
     * @author Mike McCloskey
     * @since 1.4
     * @spec JSR-51
     */
    
    public interface CharSequence {
    
        int length();
    
        char charAt(int index);
    
        CharSequence subSequence(int start, int end);
    
        public String toString();
    }

    CharSequence是一个字符序列的接口,其中定义了一些常用的如length()、subSequence()等方法,String也实现了这个接口。当然大家可能在String里用到的都是subString(),实际上String也实现了subSequence()这个方法,只是直接指向了subString()。

    //String中的subSequence方法
    public CharSequence subSequence(int beginIndex, int endIndex) {
            return this.substring(beginIndex, endIndex);
    }

    lang3中使用CharSequence最大的好处就是令这些方法用处更加广泛,不止局限于String,其他一些实现了该接口的类也可以使用StringUtils中的这些方法去进行一些操作。另外我发现很多nio中的类都实现了这个接口,个人猜测可能也有为nio服务的目的。

    2.equals

    //lang
    public static boolean equals(String str1, String str2) {
        return str1 == null?str2 == null:str1.equals(str2);
    }
    //lang3
    public static boolean equals(CharSequence cs1, CharSequence cs2) {
            return cs1 == cs2?true:(cs1 != null && cs2 != null?(cs1.length() != cs2.length()?false:(cs1 instanceof String && cs2 instanceof String?cs1.equals(cs2):CharSequenceUtils.regionMatches(cs1, false, 0, cs2, 0, cs1.length()))):false);
    }

    在lang中,第一步是先判断str1是否为空,而在lang3中,第一步则是先判断两个对象是否相同。这个不难理解,如果两个对象的地址相同,那么它们指向的就是同一个对象,内容肯定相同。

    3.isAnyEmpty、isNoneEmpty、isAllEmpty

        //lang3
        public static boolean isAnyEmpty(CharSequence... css) {
            if(ArrayUtils.isEmpty(css)) {
                return false;
            } else {
                CharSequence[] var1 = css;
                int var2 = css.length;
    
                for(int var3 = 0; var3 < var2; ++var3) {
                    CharSequence cs = var1[var3];
                    if(isEmpty(cs)) {
                        return true;
                    }
                }
    
                return false;
            }
        }
    
        public static boolean isNoneEmpty(CharSequence... css) {
            return !isAnyEmpty(css);
        }
    
        public static boolean isAllEmpty(CharSequence... css) {
            if(ArrayUtils.isEmpty(css)) {
                return true;
            } else {
                CharSequence[] var1 = css;
                int var2 = css.length;
    
                for(int var3 = 0; var3 < var2; ++var3) {
                    CharSequence cs = var1[var3];
                    if(isNotEmpty(cs)) {
                        return false;
                    }
                }
    
                return true;
            }
        }

    在lang3中,还加入了一些同时判断多个参数的方法,可以看到实际上是将参数列表放入一个CharSequence数组中,然后遍历调用之前的isEmpty等方法。判断blank也有类似的方法。

    可能有人会觉得,很多方法String本身就有啊,为什么还要用StringUtils提供的呢?抛开参数类型不谈,我们可以看到,StringUtils中的方法大多都做了空校验,如果为空时会返回Null或者空串,而String本身的方法在很多传入参数或对象本身为空的时候都会报空指针错误。

    常用方法就先介绍到这里,以后有机会再继续更。

    PS.看CharSequence源码的时候发现里面居然有实现了的方法,只是返回值前面加了个default。查了一下发现是Java8的新特性,可以在接口里面定义default方法,从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。可以参考Java 8新特性——default方法(defender方法)介绍

    展开全文
  • commons-lang3-3.3.2.jar

    热门讨论 2014-09-05 09:21:21
    最新jar commons-lang3-3.3.2.jar org.apache.commons.lang3.StringUtils;
  • commons-lang3-3.1 StringUtils字符串jar包 org.apache.commons.lang3.StringUtils的jar包
  • 转自:https://blog.csdn.net/eden_m516/article/details/75042439 参考:http://www.importnew.com/7302.html
    展开全文
  • org.apache.commons.lang jar包下载(commons-lang3-3.1.jar)

    千次下载 热门讨论 2012-04-13 13:30:54
    commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....
  • lang3之StringUtils

    千次阅读 2019-01-14 10:11:04
    该对象提供了String字符串操作的一些常用方法。 目录 appendIfMissing(如果字符串没以某个字符串结尾为结尾,就添加该结尾) abbreviate(字符串缩略) 字符串判断   方法名 使用 比较 ...)...

    该对象提供了String字符串操作的一些常用方法。

    目录

    appendIfMissing(如果字符串没以某个字符串结尾为结尾,就添加该结尾)

    abbreviate(字符串缩略)


    字符串判断

     

    方法名使用比较
    isBlank
     StringUtils.isBlank(null)      = true
     StringUtils.isBlank("")        = true
     StringUtils.isBlank(" ")       = true
     StringUtils.isBlank("bob")     = false
     StringUtils.isBlank("  bob  ") = false
    没有字符就返回true,空格也返回空

    isEmpty

     StringUtils.isEmpty(null)      = true
     StringUtils.isEmpty("")        = true
     StringUtils.isEmpty(" ")       = false
     StringUtils.isEmpty("bob")     = false
     StringUtils.isEmpty("  bob  ") = false
    含有空格,不反悔空

     

    与之对应的还有  (这里的”空“ 都泛指上面表格对应方法的true)

    其他空判断
    isNotBlank(CharSequence cs)
    isNotEmpty(CharSequence cs)
    
    非空判断
    isAnyBlank(CharSequence... css)
    isAnyEmpty(CharSequence... css)
    是否存在空字符串(多个中有一个为空,返回true)
    isNoneBlank(CharSequence... css)
    isNoneEmpty(CharSequence... css)
    是否全部都不是空(都不是空返回true)
    isAllBlank(CharSequence... css)
    isAllEmpty(CharSequence... css)
    是否全为空(全是空,返回true)

    appendIfMissing(如果字符串没以某个字符串结尾为结尾,就添加该结尾)

    例如:String a = "abc"; 

    我们规定 字符串必选以 yes 为结尾,如果abc 没有以 yes 结尾,就自动附加上,如果已经以yes 结尾那么不处理;例如:

     

    官方提供了两个相关方法:

    static StringappendIfMissing(String str, CharSequence suffix, CharSequence... suffixes)

    Appends the suffix to the end of the string if the string does not already end with any of the suffixes.

    static StringappendIfMissingIgnoreCase(String str, CharSequence suffix, CharSequence... suffixes)

    Appends the suffix to the end of the string if the string does not already end, case insensitive, with any of the suffixes.

    解释一下第三个参数,意思就是可以规定多个结尾的字符串,比喻,"yes","no","not" 等,只要其中一个符合便不附加,如果不符合,就把第一个附加到后面,也就是 “yes”

    第二个方法是忽略大写匹配

     

    abbreviate(字符串缩略)

    该方法可以实现字符串的省略,设置字符长度,后面三个字符显示为 " ... " (如果字符串长度比设置的小,就不会显示了)。如:

    官网提供了5个相关方法:

    static Stringabbreviate(String str, int maxWidth)

    Abbreviates a String using ellipses.

    static Stringabbreviate(String str, int offset, int maxWidth)

    Abbreviates a String using ellipses.

    static Stringabbreviate(String str, String abbrevMarker, int maxWidth)

    Abbreviates a String using another given String as replacement marker.

    static Stringabbreviate(String str, String abbrevMarker, int offset, int maxWidth)

    Abbreviates a String using a given replacement marker.

    static StringabbreviateMiddle(String str, String middle, int length)

    Abbreviates a String to the length passed, replacing the middle characters with the supplied replacement String.

     

     

    展开全文
  • LANG和NLS_LANG区别

    千次阅读 2017-12-03 15:59:02
    LANG是针对Linux系统的语言、地区、字符集的设置。 NLS_LANG是针对Oracle语言、地区、字符集的设置。 一·查看字符集 字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集...
    LANG是针对Linux系统的语言、地区、字符集的设置。
    

    NLS_LANG是针对Oracle语言、地区、字符集的设置。


    一·查看字符集
    字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式:

    1、[root@david ~]# echo $LANG
    zh_CN.GB18030
    2、[root@david ~]# env |grep LANG
    LANG=zh_CN.GB18030
    LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN
    3、[root@david ~]# export |grep LANG
    declare -x LANG="zh_CN.GB18030"
    declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    4、[root@david ~]# locale
    LANG=zh_CN.GB18030
    LC_CTYPE="zh_CN.GB18030"
    LC_NUMERIC="zh_CN.GB18030"
    LC_TIME="zh_CN.GB18030"
    LC_COLLATE="zh_CN.GB18030"
    LC_MONETARY="zh_CN.GB18030"
    LC_MESSAGES="zh_CN.GB18030"
    LC_PAPER="zh_CN.GB18030"
    LC_NAME="zh_CN.GB18030"
    LC_ADDRESS="zh_CN.GB18030"
    LC_TELEPHONE="zh_CN.GB18030"
    LC_MEASUREMENT="zh_CN.GB18030"
    LC_IDENTIFICATION="zh_CN.GB18030"
    LC_ALL=
    上面均说明LC_CTYPE(字符辨识编码)表示这个系统的系统现在使用的字符集是zh_CN.GB18030,LC_NUMERIC(数字系统的显示讯息)等其它与语言相关的变量。通常如果其它的语言变量都未设定,仅设定LANG这个变量就可以缺省代替所有其它变量了。


    二、修改字符集的方式
    需注意的是:如果默认语言是en_US.UTF-8,在Linux的字符和图形界面下都是无法显示和输入中文的。如果默认语言是中文,比如zh_CN.GB18030 或者zh_CN.gb2312,字符界面无法显示和输入,图形界面可以。
    修改的方式有如下两种:
    1、直接设置变量的方式修改,命令如下两条命令:
    [root@david ~]# LANG=xxx 或者  export  LANG=xxx; 
    [root@david ~]# LC_ALL=”xxx”  或者  export LC_ALL=”xxx”;
    注:xxx为欲修改为的字符集
    查看标准的字符集的方法,locale –a命令,常用的有zh_CN.GB2312、
    zh_CN.GB18030或者zh_CN.UTF-8、en_US.UTF-8等
    但是上述修改方式只会在当前shell中生效,新建shell此环境变量消失。
    故平时登录系统执行“LANG= ”这个命令的时候显示的就没有乱码的缘故,意思就是取消了字符集的显示,取消字符集还可以执行[root@david ~]# unset LANG这个命令。
    2、修改文件方式,通过修改/etc/sysconfig/i18n文件控制
    [root@david ~]# vim /etc/sysconfig/i18n
    LANG="zh_CN.GB18030"  即为系统的语言
    SUPPORTED="zh_CN.UTF-8:zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"  
    SYSFONT="lat0-sun16"
    修改文件保存退出之后要生效要执行如下命令才可生效


    Oracle NLS_LANG设置:
    SQL> SELECT *
      2    FROM DATABASE_PROPERTIES
      3   WHERE PROPERTY_NAME IN
      4         ('NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET');


    展开全文
  • commons-lang3官方教程

    千次阅读 2020-04-01 14:28:44
    commons-lang3官方教程 1. commons-lang3简介 1.1. 官方首页 官方首页 https://commons.apache.org/proper/commons-lang/index.html 1.2. 官方API 官方API地址 ...
  • Lang3就这1张图,必备(一)

    千次阅读 2016-08-03 19:23:38
    】提出问题org.apache.commons.lang3都提供哪些工具类给我们使用???解决问题在日常工作中,我们经常要使用到一些开源工具包,比如String,Date等等。有时候我们并不清楚有这些工具类的存在,造成在开发过程中重新...
  • <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <...commons-lang3</arti...
  • 在系统中安装了不同的语言包不同的字体,系统是如何判断我所要的语言界面并调用相关的字体的呢?...LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE...
  • apache提供的众多commons工具包,号称Java第二API,而common里面lang3包更是被我们使用得最多的。因此本文主要详细讲解lang3包里面几乎每个类的使用,希望以后大家使用此工具包,写出优雅的代码 讲解版本为(2018年...
  • ArrayUtils是lang3自带的数组操作工具类,下面是本人基于commons-lang3-3.5.jarf进行的实践,其中以字符串数组为例, 对于其它的数据类型,如type[]、char[]、double[]、float[]、int[]、long[]、short[]也同样适用...
  • 其它的工具类,如 SystemUtils 系统工具类 ClassUtils 类操作工具类 RandomStringUtils 随机数操作类 ...DateFormatUtils 日期格式...import org.apache.commons.lang3.ClassUtils; import org.apache.commons.la...
  • 项目lib包里少了一个jar包 commons-lang3-3.1.jar 导入到项目就可以了
  • SpringBoot集成commons-lang3

    千次阅读 2020-04-30 22:32:32
    maven依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency> ...
  • java使用commons-lang3

    千次阅读 2020-03-06 21:38:29
    -- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lan...
  • Apache提供的日期、时间相关的工具类都在org.apache.commons.lang3.time提供。 由于Java8提供了基于JSR310的规范,所以我们废弃对Date的使用,因此此处我并不推荐了,但是由于还有很多历史原因,使用了Date,所以...
  • 使用commons-lang3将Integer数组转int数组相互转换下载commons-lang3.jarMavenGradle手动下载实践代码结果 下载commons-lang3.jar Maven &lt;dependency&gt; &lt;groupId&gt;org.apache.commons&...
  • apache commons组件学习系列记录之lang3

    万次阅读 2014-04-13 08:07:15
    org.apache.commons.lang3 ArrayUtils,BooleanUtils,,StringUtils RandomUtils,RandomStringUtils, ClassUtils SerializationUtils StringEscapeUtils字符串转义,SystemUtils获取各种目录, NumberUtils用于...
  • 而接下来准备讲的java.lang.NoClassDefFoundErrorClassNotFoundException,就是属于让人咬牙切齿的问题之二。这两个问题乍一看好像都是指找不到某个类了,虽然出现这两种问题的部分原因相同,但事实上,这两个错误...
  • org.apache.commons.lang3.StringUtils依赖

    千次阅读 2020-08-28 10:10:19
    导入的common包一直找不到这个包 后面查询原来是要引入这个依赖 <dependency> <...commons-lang3</artifactId> <version>3.10</version> </dependency> ...
  • 大家都说缺少commons-lang-3.jar的jar包,但是我在后来ssh框架整合的时候,也经常是web项目启动失败,大家都说是因为commons-lang-3.jar包的原因,改成2.5或者2.3版本的就好了,事实是真的·好了! 我只是觉得很矛盾...
  • StringEscapeUtils在org.apache.commons.lang3包下,可以方便的对html等东西进行转义 StringEscapeUtils.unescapeHtml3与StringEscapeUtils.unescapeHtml4的区别在于unescapeHtml4可对更多位的html进行转义,如以下...
  • org.apache.commons.lang3 包下类

    千次阅读 2019-09-20 11:57:11
    ObjectUtils 分页处理 collectionUtils 集合工具
  • Maven导入org.apache.commons.lang3.StringUtils

    千次阅读 2020-11-19 16:08:05
    Maven导入org.apache.commons.lang3.StringUtilsMaven导入org.apache.commons.lang3.StringUtils Maven导入org.apache.commons.lang3.StringUtils pom.xml <dependencies> <dependency> <groupId&...
  • 编译时正常,压住ctrl + 鼠标单击StringUtils 发现引用的是 commons-lang3-3.2.1.jar中的StringUtils.class。 eclipse 启动项目执行正常不报错。 部署到linux 执行报错java.lang.NoSuchMethodError: org.apache...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,749,078
精华内容 699,631
关键字:

lang3和lang区别