在软件开发中,经常需要生成唯一的编号,例如订单号、发票号、实验编号等。为了简化这一过程,本文将介绍一个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详解的更多相关文章

  1. hibernate工具类HibernateUtil详解

    1.为什么要用hibernateUtil这个类,先看这段代码:     //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他      Con ...

  2. 构建自己的PHP框架之自动加载类中详解spl_autoload_register()函数

    在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数.看下面例子: printit.c ...

  3. StringUtils工具类常用方法详解

    StringUtils 常用方法 1.isEmpty(String str) 是否为空,空格字符为false2.isNotEmpty(String str) 是否为非空,空格字符为true3.isBl ...

  4. Java工具类DateFormatUtils详解

    日期和时间格式化实用程序和常量public static String format(Calendar calendar, String pattern) 说明:将日历格式化为特定的模式:参数:cal ...

  5. Java日期工具类DateUtils详解(转)

    jar包 appache下的 common-lang3 一. 对指定的日期新增年.月.周.日.小时.分钟.秒.毫秒 public static Date addDays(Date date, int ...

  6. 黑苹果引导工具 Clover 配置详解及Clover Configurator使用

    黑苹果引导工具 Clover 配置详解及Clover Configurator使用  2017-03-11 14:01:40 by SemiconductorKING 转自:@三个表哥   简介: 可 ...

  7. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  8. 【UML 建模】在线UML建模工具 ProcessOn 使用详解

    总结 : -- 推荐理由 : 最近从 Windows 操作系统 转到 MAC 上, 正在看设计模式 和 重构, 找不到好用的 UML 工具, 因此在网上找了一款可以在线使用的 UML 工具, 用起来发 ...

  9. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  10. 分区工具parted的详解及常用分区使用方法【转】

    来源:http://blog.51cto.com/zhangmingqian/1068779 分区工具parted的详解及常用分区使用方法 一.         parted的用途及说明 概括使用说明 ...

随机推荐

  1. Java 常用类 于 StringBuffer 和 StringBuilder的使用 + String三者的异同

    1 package com.bytezero.stringclass; 2 3 import org.junit.Test; 4 5 /** 6 * 关于 StringBuffer 和 StringB ...

  2. Java 在三个数字中找出最大值

    1 int aa1 = 11000000; 2 int aa2 = 20000; 3 int aa3 = 6000; 4 5 //第一种 6 int max = (aa1 > aa2)? aa1 ...

  3. kafka的数据同步原理ISR、ACK、LEO、HW

    1.数据可靠性保证,数据同步 为保证 producer 发送的数据,能可靠的发送到指定的 topic,topic 的每个 partition 收到 producer 发送的数据后,都需要向 produ ...

  4. Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思维)

    目录 题目链接 题意 题解 代码 题目链接 C. Digital Logarithm 题意 给两个长度位\(n\)的数组\(a\).\(b\),一个操作\(f\) 定义操作\(f\)为,\(a[i]= ...

  5. 摆脱鼠标系列 - vscode vim 插件 常用快捷键整理

    列表 只总结当前用到的快捷键,并且对 ctrl+c v w 这三个快捷键还是用vscode,过渡下. 复制当前行 yy 复制当前单词 yaw 移动到下一个单词 w 下移10行 . 这个有不管用了,估计 ...

  6. Android MaterialButtonToggleGroup使用

    原文地址: Android MaterialButtonToggleGroup使用 - Stars-One的杂货小窝 觉得单选框不好看,发现了一个Material里的单选按钮组,感觉UI还不错,记下使 ...

  7. SQL注入详细讲解概括—盲注

    SQL注入详细讲解概括-盲注 1.盲注简单理解 2.盲注必学函数 3.布尔盲注 4.时间盲注 一.盲注简单理解 What is 盲注? It is 在服务器没有错误回显的时候完成的注入攻击 数据库把报 ...

  8. day03-1-查看账单&结账功能

    满汉楼03 4.功能实现05 4.8查看账单功能 按照之间搭建起来的框架,在BillService编写方法 4.8.1代码实现 1.修改Bill类 重写Bill类中的toString方法 @Overr ...

  9. [置顶] drools规则引擎因为内存泄露导致的内存溢出

    进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问 ...

  10. 谈谈Redis五种数据结构及真实应用场景

    前言 如果问你redis有哪些数据结构,你肯定可以一口气说出五种基本数据结构: String(字符串).Hash(哈希).List(列表).Set(集合).zset(有序集合) 你或许还知道它还有三种 ...