自动编号工具类:NumAutoUtils详解
在软件开发中,经常需要生成唯一的编号,例如订单号、发票号、实验编号等。为了简化这一过程,本文将介绍一个Java工具类NumAutoUtils,它可以帮助我们生成带有前缀和日期的自动编号。
概述
NumAutoUtils是一个Java工具类,它提供了两种方法来生成编号:getArMaxNum和getArMaxNum2。这些方法能够根据提供的前缀、长度和日期模式来生成符合要求的编号。
方法详解
getArMaxNum
getArMaxNum方法接收三个参数:numStr(当前最大的编号字符串),prefix(编号的前缀),以及length(编号的长度)。该方法的执行流程如下:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
使用DateUtil.format方法获取当前日期,并按照DatePattern.PURE_DATE_PATTERN格式化日期。
根据length参数创建一个足够长度的数字字符串,不足的部分用0填充。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将前缀、日期和新编号拼接后返回。
getArMaxNum2
getArMaxNum2方法有两个重载版本,第一个版本使用默认的日期模式DatePattern.PURE_DATE_PATTERN,第二个版本允许用户自定义日期模式。该方法的执行流程与getArMaxNum类似,但在处理编号时有一些不同:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
根据用户提供的日期模式格式化当前日期。
调用getInitNum方法生成一个初始编号字符串,该方法会根据length参数创建一个以1开头,其余部分用0填充的字符串。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将新编号填充到足够的长度,并与前缀和日期拼接后返回。
使用场景
NumAutoUtils类适用于需要生成带有日期前缀和自定义长度编号的场景。例如,你可以使用它来生成实验报告的编号,如EXP-20220711-1000,或者财务部门生成带有年度和序号的发票号。
结论
NumAutoUtils是一个简单而强大的工具类,它可以帮助开发者轻松生成符合规则的编号。通过使用这个工具类,我们可以减少手动编写编号生成逻辑的时间,从而提高开发效率。
`在软件开发中,经常需要生成唯一的编号,例如订单号、发票号、实验编号等。为了简化这一过程,本文将介绍一个Java工具类NumAutoUtils,它可以帮助我们生成带有前缀和日期的自动编号。
概述
NumAutoUtils是一个Java工具类,它提供了两种方法来生成编号:getArMaxNum和getArMaxNum2。这些方法能够根据提供的前缀、长度和日期模式来生成符合要求的编号。
方法详解
getArMaxNum
getArMaxNum方法接收三个参数:numStr(当前最大的编号字符串),prefix(编号的前缀),以及length(编号的长度)。该方法的执行流程如下:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
使用DateUtil.format方法获取当前日期,并按照DatePattern.PURE_DATE_PATTERN格式化日期。
根据length参数创建一个足够长度的数字字符串,不足的部分用0填充。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将前缀、日期和新编号拼接后返回。
getArMaxNum2
getArMaxNum2方法有两个重载版本,第一个版本使用默认的日期模式DatePattern.PURE_DATE_PATTERN,第二个版本允许用户自定义日期模式。该方法的执行流程与getArMaxNum类似,但在处理编号时有一些不同:
创建一个StringBuffer对象experimentNum,用于拼接编号的前缀和日期。
根据用户提供的日期模式格式化当前日期。
调用getInitNum方法生成一个初始编号字符串,该方法会根据length参数创建一个以1开头,其余部分用0填充的字符串。
如果numStr不为空,则提取出最后length个字符作为当前最大编号,并加1得到新的编号。
将新编号填充到足够的长度,并与前缀和日期拼接后返回。
使用场景
NumAutoUtils类适用于需要生成带有日期前缀和自定义长度编号的场景。例如,你可以使用它来生成实验报告的编号,如EXP-20220711-1000,或者财务部门生成带有年度和序号的发票号。
结论
NumAutoUtils是一个简单而强大的工具类,它可以帮助开发者轻松生成符合规则的编号。通过使用这个工具类,我们可以减少手动编写编号生成逻辑的时间,从而提高开发效率。
package com.csot.kms.common.utill;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import java.util.Date;
/**
* @Author dj
* @Date 2022/7/11
**/
public class NumAutoUtils {
/***
* 获取最大的编号。
* @param numStr
* @param prefix
* @param length
* @return 前缀_年月_1000
*/
public static String getArMaxNum(String numStr,String prefix,Integer length) {
StringBuffer experimentNum = new StringBuffer();
experimentNum.append(prefix);
experimentNum.append(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN));
StringBuffer sbNum = new StringBuffer("1");
for (int i = 1; i < length; i++) {
sbNum.append("0");
}
Integer num = Integer.parseInt(sbNum.toString());
if (StrUtil.isNotBlank(numStr)) {
String lastNum = numStr.substring(numStr.length() - length, numStr.length());
num = Integer.parseInt(lastNum) + 1;
}
return experimentNum.append("-").append(num).toString();
}
/***
*
* @param numStr
* @param prefix
* @param length
* @return 前缀_年月_00001
*/
public static String getArMaxNum2(String numStr,String prefix,Integer length) {
return getArMaxNum2(numStr, prefix, length, DatePattern.PURE_DATE_PATTERN);
}
public static String getArMaxNum2(String numStr,String prefix,Integer length,String datePattern) {
StringBuffer experimentNum = new StringBuffer();
experimentNum.append(prefix);
experimentNum.append(DateUtil.format(new Date(), datePattern));
String lastNumStr = getInitNum(length).toString();
if (StrUtil.isNotBlank(numStr)) {
int numStrLg = numStr.length();
int lastNum = Integer.parseInt(numStr.substring(numStrLg - length, numStrLg))+1;
lastNumStr = String.valueOf(lastNum);
for (int i = 0; i < length; i++) {
lastNumStr = lastNumStr.length()<length ? "0"+lastNumStr:lastNumStr;
}
}
return experimentNum.append("-").append(lastNumStr).toString();
}
private static StringBuffer getInitNum(Integer length) {
StringBuffer sbNum = new StringBuffer();
for (int i = 1; i < length; i++) {
sbNum.append("0");
}
sbNum.append("1");
return sbNum;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)