见过大多数公司都有封装自己的工具类,很多已经有人实现了方法又重新实现一遍,不仅代码质量得不到保证,而且性能,并发都会有问题;反正我一般不用公司封装的工具类,像 apache.commons ,springutil 中都已经有很多现成的工具可以使用了,没必要重复造轮子;本文章主要是说一下有哪些比较常用的工具可以使用,不一定全面,大神勿踩。
本文引用的所有包如下
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>3.4version>
dependency>
<dependency>
<groupId>commons-collectionsgroupId>
<artifactId>commons-collectionsartifactId>
<version>3.2.1version>
dependency>
<dependency>
<groupId>commons-codecgroupId>
<artifactId>commons-codecartifactId>
<version>1.3version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.6version>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-textartifactId>
<version>1.5version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>4.3.6.RELEASEversion>
dependency>
下面每个块的工具都是按我的使用频率排序的。
字符串处理
import org.apache.commons.lang3.StringUtils;
boolean StringUtils.isBlank(str); // " " 为 true
boolean StringUtils.isEmpty(str); // " " 为 false
boolean StringUtils.isNotBlank(str);
boolean StringUtils.isNotEmpty(str);
String[] StringUtils.split(str,char/String,max);//切割字符串,使用给定字符 ; max 主要是用来处理空内容的
String StringUtils.capitalize(str); //首字母大写
String StringUtils.uncapitalize(str); //首字母小写
boolean StringUtils.isNumeric(str);
boolean StringUtils.isNumericSpace(str); // "" 为true "12 3" 为 true
String StringUtils.join(array/Iterable,chat/String); // 类似于 js 的 join ,使用给定字符拼接数组或集合中的元素
String StringUtils.leftPad(str,size,padChar); //给左边拼接固定长度的字符
String StringUtils.rightPad(str,size,padChar); //右边拼接固定长度的字符
格式化信息
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
DateFormatUtils.format(Date/Calendar/long,pattern);
DateFormatUtils.ISO_DATE_FORMAT.format(Date/Calendar/long); // yyyy-MM-dd
DateFormatUtils.ISO_TIME_NO_T_FORMAT.format(Date/Calendar/long);// HH:mm:ss
DurationFormatUtils.formatDuration(long,format); //格式化毫秒值为指定格式
// 用于实体类 param,po,dto,vo
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this,ToStringStyle.SHORT_PREFIX_STYLE);
}
集合和数组的处理
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.collections.CollectionUtils;
boolean ArrayUtils.isEmpty(Array);
boolean ArrayUtils.isNotEmpty(Array);
boolean CollectionUtils.isEmpty(Collection);
boolean CollectionUtils.isNotEmpty(Collection);
Collection CollectionUtils.union(a,b); //并集
Collection CollectionUtils.intersection(a,b); //交集
Collection CollectionUtils.disjunction(a,b); //补集
Collection CollectionUtils.subtract(a,b); //差集
日期处理
import org.apache.commons.lang3.time.DateUtils;
Date DateUtils.parseDate(str,parsePatterns);
boolean DateUtils.isSameDay(Date,Date); //判断两个日期是否是同一天
Date DateUtils.truncate(Date,field); //日期截取,只取指定日期字段的值
Date DateUtils.round(Date,field); // 日期四舍五入,和 truncate 的区别是 如果用 YEAR 当前时间是 2019-08-18 truncate 的值还是 2019 ,但 round 会得到 2020
Date DateUtils.addDays(Date,amount); //增加一天,这个不会修改原来的日期值
还有 addYears,addMonths,addWeeks,addHours,addMinutes,addSeconds,addMilliseconds
Date DateUtils.setDays(Date,amount); //设置为本月的第几天
还有 setYears,setMonths,setHours,setMinutes,setSeconds,setMilliseconds
/*
计算已过去的天数,从哪儿开始算呢,根据第2个参数fragment来确定,
如现在是2014-10-23 13:27:00,那么
DateUtils.getFragmentInDays(new Date(), Calendar.MONTH)返回23,表示从当月起已经过去23天了,
DateUtils.getFragmentInDays(new Date(), Calendar.YEAR)返回296,表示从当年起已经过去296天了,
DateUtils.getFragmentInHours(new Date(), Calendar.DATE)返回13,表示从今天起已经过去13个小时了
*/
long DateUtils.getFragmentInDays(Date,fragment); //计算已经过去的天数
数字的一些处理
import org.apache.commons.lang3.math.NumberUtils;
int NumberUtils.toInt(String);
还有 toLong,toDouble,toFloat,toShort 等
boolean NumberUtils.isDigits(String); //判断是否全由数字组成 "" 为 false; 一般使用这个来判断, 不使用 isNumber
boolean NumberUtils.isNumber(String); // 支持 0x 类的表达形式
增强反射处理
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.reflect.MethodUtils;
import org.springframework.cglib.core.ReflectUtils;
import org.springframework.util.ReflectionUtils;
Class<?> ClassUtils.getClass(className);
boolean ClassUtils.isInnerClass(Class<?>); //是否是内部类
boolean ClassUtils.isPrimitiveOrWrapper(Class<?>); //判断是否是原始类型或原始类型的包装类
List<Method> MethodUtils.getMethodsListWithAnnotation( Class<?>, Class<? extends Annotation>);
Method ReflectionUtils.findMethod(Class<?> clazz,methodName, Class<?>...);
PropertyDescriptor[] ReflectUtils.getBeanGetters(Class type);
Object MethodUtils.invokeMethod(object,methodName,args[],values[]); //调用方法
IO 流,文件相关方法
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
String IOUtils.toString(InputStream,encoding); //从流读出字符串
InputStream IOUtils.toInputStream("字符串可以直接转流", "utf-8"); // 字符串可以直接转成流,内部是用的 ByteArrayInputStream
List<String> IOUtils.readLines(InputStream,encoding); //文本文件读出 List
int IOUtils.copy(InputStream, OutputStream);
void FileUtils.writeStringToFile(File, String, Charset);
void FileUtils.deleteDirectory(File);
String FilenameUtils.getBaseName(filename); //获取文件名
String FilenameUtils.getExtension(filename); //获取扩展名
String FilenameUtils.separatorsToUnix(String path); //转成 linux 路径分隔符
加解密相关
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
byte[] Base64.encodeBase64(byte []);
byte[] Base64.decodeBase64(byte[]);
char [] Hex.encodeHex(byte []);
byte [] Hex.decodeHex(char []);
String DigestUtils.md5Hex(String);
// 20 个字节 hex 对应 40 位
byte [] sha1 = DigestUtils.sha1("abc123456");
// 32 个字节 hex 对应 64 位
byte[] sha256 = DigestUtils.sha256("abc123456");
// 48 个字节 hex 对应 96 位
byte[] sha384 = DigestUtils.sha384("abc123456");
// 64 个字节 hex 对应 128 位
byte[] sha512 = DigestUtils.sha512("abc123456");
随机数生成
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.RandomStringUtils;
int RandomUtils.nextInt(start,end);
long RandomUtils.nextLong(start,end);
String RandomStringUtils.randomNumeric(count);
String RandomStringUtils.randomAlphabetic(count);
文本处理相关
import org.apache.commons.text.StringEscapeUtils;
import org.apache.commons.text.StringSubstitutor;
import org.apache.commons.text.StringSubstitutor;
// 占位符替换,不用考虑空值问题,比 感觉比 spring 的更人性化
Map<String, Object> params = new HashMap<String, Object>();params.put("user", "admin");params.put("password", "123456");params.put("system-version", "windows 10");params.put("version", null);
StringSubstitutor strSubstitutor = new StringSubstitutor(params, "${", "}");
//是否在变量名称中进行替换
strSubstitutor.setEnableSubstitutionInVariables(true);
String strSubstitutor.replace("你的用户名是${user},密码是${password}。系统版本${system-${version}}");
// 对一些特殊字符进行转义
String StringEscapeUtils.escapeHtml3(String str);
String StringEscapeUtils.escapeHtml4(String str);
String StringEscapeUtils.escapeJava(String str);
String StringEscapeUtils.escapeJson(String str);
String StringEscapeUtils.escapeEcmaScript(String str);
其它可以用到的工具
// 秒表
import org.apache.commons.lang3.time.StopWatch;
StopWatch stopWatch = new StopWatch();
stopWatch.start();
stopWatch.getTime();
stopWatch.stop();
//spring 获取方法参数名称
import org.springframework.core.ParameterNameDiscoverer;
ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);
//spring 用于处理逗号分隔符的字符串列表方法
import org.springframework.util.StringUtils;
String [] StringUtils.tokenizeToStringArray(String str, String delimiters);
// spring 处理占位符
PropertyPlaceholderHelper placeholderHelper = new PropertyPlaceholderHelper("{", "}",":",true);
String placeholderHelper.replacePlaceholders(String value, Properties properties);
我的一个工具 sanri-tools , 可以做 kafka 监控(主题,消费组,分区,反序列化) , redis 数据查看(可以反序列化字段信息看到真实数据),数据表管理,代码生成
sanri-tools
我的博客文章大纲