# 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
============
[](https://maven-badges.herokuapp.com/maven-central/com.mzlion/easy-okhttp/)[](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工具类