自动编号工具类: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;
}
}
自动编号工具类:NumAutoUtils详解的更多相关文章
- hibernate工具类HibernateUtil详解
1.为什么要用hibernateUtil这个类,先看这段代码: //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他 Con ...
- 构建自己的PHP框架之自动加载类中详解spl_autoload_register()函数
在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数.看下面例子: printit.c ...
- StringUtils工具类常用方法详解
StringUtils 常用方法 1.isEmpty(String str) 是否为空,空格字符为false2.isNotEmpty(String str) 是否为非空,空格字符为true3.isBl ...
- Java工具类DateFormatUtils详解
日期和时间格式化实用程序和常量public static String format(Calendar calendar, String pattern) 说明:将日历格式化为特定的模式:参数:cal ...
- Java日期工具类DateUtils详解(转)
jar包 appache下的 common-lang3 一. 对指定的日期新增年.月.周.日.小时.分钟.秒.毫秒 public static Date addDays(Date date, int ...
- 黑苹果引导工具 Clover 配置详解及Clover Configurator使用
黑苹果引导工具 Clover 配置详解及Clover Configurator使用 2017-03-11 14:01:40 by SemiconductorKING 转自:@三个表哥 简介: 可 ...
- 日志分析工具ELK配置详解
日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...
- 【UML 建模】在线UML建模工具 ProcessOn 使用详解
总结 : -- 推荐理由 : 最近从 Windows 操作系统 转到 MAC 上, 正在看设计模式 和 重构, 找不到好用的 UML 工具, 因此在网上找了一款可以在线使用的 UML 工具, 用起来发 ...
- Fiddler抓取https请求 & Fiddler抓包工具常用功能详解
Fiddler抓取https请求 & Fiddler抓包工具常用功能详解 先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...
- 分区工具parted的详解及常用分区使用方法【转】
来源:http://blog.51cto.com/zhangmingqian/1068779 分区工具parted的详解及常用分区使用方法 一. parted的用途及说明 概括使用说明 ...
随机推荐
- Gitlab的部署
# Gitlab sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish ...
- Vue3基础知识提炼
1.{{}} data2.""等同{{}},数据单向绑定v-bind: 简化 :3.v-if v-else4.v-for="(i, index) in array&quo ...
- 连接 AI,NebulaGraph Python ORM 项目 Carina 简化 Web 开发
作者:Steam & Hao 本文整理自社区第 7 期会议中 13'21″ 到 44'11″ 的 Python ORM 的分享,视频见 https://www.bilibili.com/vid ...
- Java 临时笔记
1 //srand((unsignedint)time(NULL)); C 2 //获取随机数 10-99 3 4 //int value = (int)(Math.random() * 90+10) ...
- Jenkins Pipeline:根据参数设置环境变量
pipeline { agent any environment { //以上自定义的参数 project = "$params.PROJECT" } stages { stage ...
- kafka 为什么能那么快?高效读写数据,原来是这样做到的
1. 利用 Partition 实现并行处理 我们都知道 Kafka 是一个 Pub-Sub 的消息系统,无论是发布还是订阅,都要指定 Topic. Topic 只是一个逻辑的概念.每个 Topic ...
- JS案例-网页轮播图
鼠标经过轮播图模块,左右按钮提示,离开隐藏左右按钮 点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理 图片播放的同时,下面小圆圈模块跟随一起变化 点击小圆圈,可以播放相应图片 鼠标不经过轮播 ...
- springboot中使用restTemplate发送带参数和请求头的post,get请求
最近在工作中使用到了用restTemplate去获取网站数据填入到数据库中,在这里记录下来以便以后使用: 添加相关依赖:版本使用springboot中的 <dependency> < ...
- Failed to execute goal on project WebBackend: Could not resolve dependencies for project com.lang.yi:WebBackend:jar:1.0.0
一.问题由来 自己在搭建项目的时候报一个错误,如标题所示,具体错误信息如下: Failed to execute goal on project WebBackend: Could not resol ...
- AutoNumber VsCode插件开发
AutoNumber VsCode插件开发 ::: details 目录 目录 AutoNumber VsCode插件开发 Step. 2: 安装脚手架 Step. 3: 创建空项目 Step. 4: ...