# mzlion-core **Repository Path**: Eason0562/mzlion-core ## Basic Information - **Project Name**: mzlion-core - **Description**: 常用工具类 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2024-12-13 - **Last Updated**: 2024-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mzlion-core ============ [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.mzlion/easy-okhttp/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.mzlion/easy-okhttp/)[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) Java常用的工具集合 ================= ## 简介 该项目是一个Java基础工具类,目前提供了对文件、流、字符串、日期、JSON和集合等JDK方法进行封装,是我平时写项目的积累和总结。项目也参考了Apache Commons Lang和JODD里的一些写法,不过大部分还是自己写的。并且提供了详细的注释。 ## 依赖说明 本项目依赖了2个基础jar 1. slf4j-api 为了记录日志 2. gson JSON字符串和JavaBean相互转换的默认框架 ## 使用 maven ``` xml com.mzlion mzlion-core 1.0.10-Final ``` gradle `com.mzlion:mzlion-core:1.1.10-Final` ## 文档 ### StringUtils工具类 我像这个`StringUtils`这个工具类的使用频率应该是最大的,毕竟我们平时开发项目的时候处理字符串比例大。 1. 非常常见的方法:`isEmpty()`,`hasLength()`,`hasText()` `isEmpty()`和`hasLength()`返回值正好相反,所以这里介绍下`hasLength()`判断逻辑,首先校验字符串是否为空,其次判断字符串的长度是否大于0。`hasText()`除了`hasLength()`校验逻辑之外,还判断了字符串是否至少存在一个非空白字符,所谓空白字符有空格、制表符等。 2. `trim()`方法 该方法主要用来去除字符串两边的空白字符,相比系统的`String.trim()`提供的方法,该方法不会出现`NullPointException`,并且不采用正则剔除,速度略微稍好。 3. `replace()`方法 该方法比系统`String.replace()`方法执行效率更高,因为该方法不支持正则匹配,如果必须要正则处理,请使用系统提供的替换方法。 4. `split()`方法 该方法同样比系统`String.split()`方法执行效率更高,因为该方法不支持正则匹配,如果必须要正则处理,请使用系统提供的替换方法。 5. `toUnderline()`方法 该方法将驼峰式命名的字符串转为下划线字符串,比如字符串`HelloWorld`会转为`hello_world`。 6. `isDigital()`方法 该方法用于判断是否是纯数字组成。 7. `isNumeric()` 该方法判断是否是数值类型的字符串。 ### CollectionUtils工具类 这个类专门操作Map及其子类、Collection及其子类的集合工具类。在实际开发中应用的也比较多。 1. 非常常见的方法:`isEmpty()`,`isNotEmpty()` 主要判断集合是否为空或非空 2. `toString(Map)`方法 该方法将Map数据转为字符串,默认采用URL参数拼接格式风格。形如如下实例 ``` java Map params = new HashMap<>(); params.put("username","admin"); params.put("password","123456"); String str = CollectionUtils.toString(params); //则得到的字符串结果为 "username=admin&password=123456" ``` 3. `asCommonSignString(Map params)` 在做接口通讯时经常需要签名验签,目前通用规则是:将参数按照字母自然排序, 参数之间使用`&`连接符组成一个待签名的字符串,形如`charset=UTF-8&ordAmt=1&ordDetail=Iphone十台&signType=1`.那个这个方法就是干这件事情的。 ### gson.JsonUtil工具类 gson.JsonUtil是对Gson的封装,与其同类名的还有fastjson.JsonUtil. 本项目默认使用的Gson,如果需要需要`fastjson.JsonUtil`的,需要手动引入fastjon的依赖 ```xml com.alibaba fastjson ${fastjson.version} ``` 两个工具类的提供的方法基本类似,下面着重介绍`gson.JsonUtil`,以下简称`JsonUtil` `JsonUtil`是提供了将JavaBean和JSON字符串相互转换的功能,并且该工具类自动忽略静态属性和`transient`属性,另外对属性值为`null`也是直接忽略。 1. `JsonUtil.toJson(T value)` 将JavaBean对象转为JSON字符串,这个方法也是使用频率极高的。 2. `JsonUtil.toJson(T value,String[] ignorePropertyNames)` 将JavaBean对象转为JSON字符串,并且根据`ignorePropertyNames`过滤属性 3. `JsonUtil.toJson(T value,boolean toUnicode,String[] ignorePropertyNames)` 将JavaBean对象转为JSON字符串, 并且额外提供了将非ASCII码转为Unicode码,便于在网络通讯时出现乱码的解决之道; 4. `JsonUtil.toJson(T value,boolean toUnicode,boolean ignoreNull,String[] ignorePropertyNames)` 将JavaBean对象转为JSON字符串, 工具默认是直接忽略值为`null`的属性,那么此方法提供便于调用者可以自动,这个方法也是最全最具有控制权的一个方法了。 5. 'JsonUtil.fromJson(String json,Class clazz)' 将JSON字符串转为JavaBean对象,这个方法也是使用率比较高的。 6. 'JsonUtil.fromJson(String json,TypeToken typeToken)' 将JSON字符串转为JavaBean对象,本方法主要针对带有泛型类型的JavaBean。 这个方法的用法下面特别举例说明下,因为`TypeToken`需要使用子类实例对象,这个是对能够解析出泛型描述的手段。 ```java String jsonArray = "[{\"userId\":\"u2016071301\",\"userName\":\"张三\"},{\"userId\":\"u2016071302\",\"userName\":\"李四\"}]"; List personList = JsonUtil.fromJson(jsonArray,new TypeToken>(){ }); //主要TypeToken使用的子类对象 ``` ### ArrayUtils工具类 这个类专门操作数组的工具类,提供了空、非空判断,强大的`toString()`方法,`toString()`方法提供非常多的重载方法,调用方式也非常简单。 ### NumberUtils工具类 这是一个数值的工具类,目前仅仅提供了数字、实数的判断,科学计数法的转为可展示的普通字符串。 **新增加了金额元和分的相互转化,解决了形如`10.445`这种临界值四舍五入时未得到期望值`10.45`** ### PlaceholderPropertyResolver类 这是一个针对`.properties`格式的处理类,该类特点主要有: * 支持`classpath:`文件路径写法 * 支持多配置文件读取,重名的key会被覆盖 * 支持`${key}`语法,其中`key`可以是当前文件的属性名,也可以系统的属性名 * 支持Builder模式,不过这个目前好处体现不大 用法也非常简单,下面举例说明 ```java PropertyResolver propertyResolver = new PlaceholderPropertyResolver.Builder() .path("classpath:system.properties") .build(); String port = propertyResolver.getProperty("port"); Assert.assertEquals("3306", port); ``` 下面再来介绍这个类的一些常用方法 1. `containsProperty(String key)` 判断`key`是存在 2. 'getAllProperties()' 返回所有的键值对 3. `getProperty(String key)` 返回`key`的值 4. `getProperty(String key, String defaultValue)` 返回`key`的值,如果值为`null`则默认值`defaultValue` 5. `getProperty(String key, Class targetType)` 返回`key`的值,并且根据返回值类型尝试自动转换 ### IOUtils工具类