欢迎来到【wolive 源码】【源码中国1001无标题】【网课分销平台 源码】commonslang源码-皮皮网网站!!!

皮皮网

【wolive 源码】【源码中国1001无标题】【网课分销平台 源码】commonslang源码-皮皮网 扫描左侧二维码访问本站手机端

【wolive 源码】【源码中国1001无标题】【网课分销平台 源码】commonslang源码

2024-11-19 07:47:53 来源:{typename type="name"/} 分类:{typename type="name"/}

1.求shop++的源代码
2.程序员的福音 - Apache Commons Lang
3.你知道ApacheCommon包中isNumeric方法是坑吗?
4.StringUtils在commons-lang3和commons-lang中的区别
5.别再用 System.currentTimeMillis() 统计耗时了,太 Low,StopWatch 好用到爆!

commonslang源码

求shop++的源代码

       主要库

       spring-aop-4.0.9.RELEASE

       spring-beans-4.0.9.RELEASE

       spring-context-4.0.9.RELEASE

       spring-context-support-4.0.9.RELEASE

       spring-core-4.0.9.RELEASE

       spring-expression-4.0.9.RELEASE

       spring-jdbc-4.0.9.RELEASE

       spring-orm-4.0.9.RELEASE

       spring-test-4.0.9.RELEASE

       spring-tx-4.0.9.RELEASE

       spring-web-4.0.9.RELEASE

       spring-webmvc-4.0.9.RELEASE

       hibernate-core-4.3.9.Final

       hibernate-jpa-2.1-api-1.0.0.Final

       hibernate-entitymanager-4.3.9.Final

       hibernate-validator-5.1.3.Final

       hibernate-search-orm-4.5.3.Final

       lucene-core-3.6.2

       freemarker-2.3.

       ehcache-core-2.6.

       ehcache-web-2.0.4

       shiro-core-1.2.3

       shiro-web-1.2.3

       c3p0-0.9.2.1

       commons-lang-2.6

       commons-beanutils-1.9.2

       commons-collections-3.2.1

       commons-io-2.4

       commons-net-3.3

       commons-fileupload-1.3.1

       commons-codec-1.

       commons-email-1.3.3

       commons-compress-1.9

       junit-4.

       mons工具包中,Lang包是最常用的。

       目前Lang包包括commons-lang3和commons-lang两个版本。wolive 源码Lang的最新版本为2.6,适用于Java1.2及以上环境,但官方已不再维护。Lang3的最新版本为3..0,适用于Java8及以上环境,完全支持Java8的特性,并废弃了一些旧的API。由于版本不兼容,源码中国1001无标题Lang3更名为lang3以避免冲突。

       推荐Java8以上的用户使用lang3代替lang。以下内容以lang3 - 3..0版本为例进行说明。

       以下是整体结构:

       以下仅列举其中常用功能进行说明,其余功能可自行查阅源码研究。

       . 日期相关:在Java8之前,日期处理主要依赖于java.util.Date和java.util.Calendar类,但这两个API存在线程安全问题且不够便捷。Java8推出了新的日期API。如果仍在使用旧的日期API,可以使用DateUtils和DateFormatUtils工具类进行转换和计算。

       . 字符串相关:字符串是Java中最常用的类型,相关工具类也最为常用。网课分销平台 源码以下列举了一些常用功能:

       1. 字符串判空

       2. 字符串去空格

       3. 字符串分割

       4. 取子字符串

       5. 其他功能

       6. 随机字符串

       . 反射相关:反射是Java的重要特性,Lang包中的反射工具类可以方便地实现反射功能。以下列举了一些常用功能:

       1. 属性操作

       注:方法名含Declared的只会在当前类实例上寻找,不包含Declared的在当前类上找不到则会递归向父类上一直查找。

       2. 获取注解方法

       3. 方法调用

       其他还有ClassUtils,ConstructorUtils,TypeUtils等,不是很常用,有需求的可以现查阅类的源码。

       . 系统相关:主要获取操作系统和JVM的一些信息。

       . 总结:除了以上介绍的工具类外,还有其他不常用的工具类。感兴趣的源码和示例代码区别用户可以自行查阅源码研究。

你知道ApacheCommon包中isNumeric方法是坑吗?

       使用的Apache-Common包的版本是commons-lang-2.6.jar

       本文就来分享一个这个坑的情况,以免其它tx也掉坑中

       费话不多说,来看代码: package chapter4; import org.apache.commons.lang.StringUtils; /** * Created by MyWorld on /3/. */ public class StringUtilsIsNumericChecker { public static void main(String[] args) { System.out.println(StringUtils.isNumeric("1")); System.out.println(StringUtils.isNumeric("-1")); } }

       围观的tx,认为上面api的输出结果会是什么呢?两个true? 好吧,执行一行看看结果: true false

       什么情况,-1不是数字吗? 为什么是false呢 来分析下源码: public static boolean isNumeric(String str) { if (str == null) { return false; } int sz = str.length(); for (int i = 0; i sz; i++) { if (Character.isDigit(str.charAt(i)) == false) { return false; } } return true; }

       源码中判断是否数字的依据是JDK的API: java.lang.Character.isDigit(str.charAt(i)) 看看个API的源码: public static boolean isDigit(char ch) { return isDigit((int)ch); }

       看看isDigit(int codePoint)的源码: public static boolean isDigit(int codePoint) { boolean bDigit = false; if (codePoint = MIN_CODE_POINT codePoint = FAST_PATH_MAX) { bDigit = CharacterDataLatin1.isDigit(codePoint); } else { int plane = getPlane(codePoint); switch(plane) { case(0): bDigit = CharacterData.isDigit(codePoint); break; case(1): bDigit = CharacterData.isDigit(codePoint); break; case(2): bDigit = CharacterData.isDigit(codePoint); break; case(3): // Undefined case(4): // Undefined case(5): // Undefined case(6): // Undefined case(7): // Undefined case(8): // Undefined case(9): // Undefined case(): // Undefined case(): // Undefined case(): // Undefined case(): // Undefined bDigit = CharacterDataUndefined.isDigit(codePoint); break; case(): bDigit = CharacterData0E.isDigit(codePoint); break; case(): // Private Use case(): // Private Use bDigit = CharacterDataPrivateUse.isDigit(codePoint); break; default: // the argument's plane is invalid, and thus is an invalid codepoint // bDigit remains false; break; } } return bDigit; }

       下面还有更深的调用,貌似还涉及到ASCII码了。 水太深,就不继续看了。 有一点是肯定的,这个API不是通过类似Regex expression的方式来判断是数字,而通过每个字符的ASCII的值类确定的 回到API的isNumeric(String str), 看看Doc是php单点登录示例源码怎么说的: /** * pChecks if the String contains only unicode digits. * A decimal point is not a unicode digit and returns false./p * * pcodenull/code will return codefalse/code. * An empty String (length()=0) will return codetrue/code./p * * pre * StringUtils.isNumeric(null)  = false * StringUtils.isNumeric("")   = true * StringUtils.isNumeric(" ")  = false * StringUtils.isNumeric("") = true * StringUtils.isNumeric(" 3") = false * StringUtils.isNumeric("ab2c") = false * StringUtils.isNumeric("-3") = false * StringUtils.isNumeric(".3") = false * /pre * * @param str the String to check, may be null * @return codetrue/code if only contains digits, and is non-null */

       看完上面的Doc,感觉水好深。 这个API的方法名直接命名为isInt不就完了。方法名很容易误导人 这也是给开发的tx敲了一个警钟, api使用之前一定要确认清楚,至少看看Doc文档吧

StringUtils在commons-lang3和commons-lang中的区别

        (1)入参类型不同

        commons.lang中入参为 Sring str

        commons.lang3中入参为 CharSequence cs(适用范围更广)

        (2)入参数量不同

        commons.lang3中支持多入参

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

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

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

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

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

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

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

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

        参考地址: StringUtils在commons-lang3和commons-lang中的区别

别再用 System.currentTimeMillis() 统计耗时了,太 Low,StopWatch 好用到爆!

       你是否还在用 System.currentTimeMillis... 来统计耗时?其实,这已不再是最优选择。StopWatch 工具类提供了更为简便且强大的耗时统计方式。

       StopWatch 工具类在 Java 中被广泛使用,它能够帮助你轻松完成多个任务的计时与总耗时统计,不再需要手工计算,避免了可能的逻辑错误。

       两个常用的 StopWatch 工具类名称相同,但它们的用法大相径庭。本文将为你详细介绍如何使用它们。

       在 Apache 开源的通用工具包 commons-lang3 中,你需要额外引入 Maven 依赖来使用 StopWatch。以下是创建 StopWatch 实例的三种方法:

       1. 使用 new 关键字

       2. 使用 create 工厂方法

       3. 使用 createStarted 方法,此方法会同时创建实例并启动计时。

       下面是一个简单的示例:

       在使用 StopWatch 时,你可以暂停、恢复、停止计时以及重置计时。本文将通过具体示例来演示这些功能。

       为了便于理解,我们将继续演示上述示例,并对其中的计时过程进行详细说明。

       为了帮助你更好地掌握 StopWatch 的使用,本文提供了所有完整示例的源代码,你可以在 Github 上查看。欢迎你将代码 Star 学习,后续的 Java 示例也将在此平台上提供。

       如果你的项目使用了 Spring 框架,Spring 也提供了一个 StopWatch 工具类。接下来,我们将通过一个简单的例子来介绍 Spring 中的 StopWatch,并展示其功能。

       Spring 提供的 StopWatch 让你能够手动开始和停止计时,并且可以按格式化打印结果。此外,它还支持为每个子任务添加名称,使得多任务统计时更为直观。

       在深入研究 StopWatch 的核心源码后,你会发现其实它们都基于 JDK 的 System 类进行了封装。

       总结而言,commons-lang3 和 Spring 框架中的 StopWatch 都能高效完成耗时统计任务。它们各有优缺点,而灵活与强大则是commons-lang3 的优势所在。Spring 则提供了额外的功能,如格式化打印结果和子任务名称,使其在多任务统计时更为便捷。

       总的来说,推荐使用 commons-lang3 工具包中的 StopWatch。如果项目需要额外引入依赖,Spring 中的 StopWatch 也是一个不错的选择。希望你能在统计耗时时做出更明智的选择,并与他人分享。记住,别再用手工计算耗时了,选择 StopWatch,让你的代码更加专业和高效。

       本文的所有示例代码已上传至 Github,欢迎你 Star 学习。后续更多 Java 技术分享和最新资讯将在 Java 技术栈公众号上发布,记得关注以获取最新信息。