写道 在某些应用场景中,因业务需要,一般的流水号(前缀+日期或时间+流水号)规则无法满足业务需要,以下是因业务需要拓展出来的流水号生成规则

业务要求:

1.默认限定位数的数字递增

2.在限定位数数字达到全部为9的时候,用字母替换最后一位,数字归0再次递增

3.当字母长度为限定位数长度并且字母都为Z的时候,限定长度加1

预期结果(限定长度4位,从1开始):

0001...9999...001A...001B...001Z...01AZ..........1ZZZ...AZZZ..BZZZ..ZZZZ...10000

以下抛砖引玉,如有更好的方案欢迎各位留言

/**

*

*/

package org.ab.test;

import java.util.concurrent.atomic.AtomicInteger;

/**

* @Project ABComponents

* @Copyright © 2008-2014 SPRO Technology Consulting Limited. All rights reserved.

* @fileName org.ab.test.SeriNumber.java

* @Version 1.0.0

* @author Allan Ai

* @time 2014-4-2

*

*/

public class SeriNumber {

public static void sn(int len,Integer i,String driver){

String dr = "";

AtomicInteger z = new AtomicInteger(i);

z.getAndIncrement();

if(z.toString().length()>(len-(driver!=null?driver.length():0))){

dr = driverCheck(driver,len);

if(dr.equals(".N")){//如超出限定长度并字母都为Z的时候,限定长度加1,dr重新开始,默认为空

len++;

dr = "";

}else{

z.set(1);

}

}else{

dr = driver;

}

if(dr.length()==len){

System.out.println(dr);

}else{

System.out.println(String.format("%0"+(len-dr.length())+"d", z.intValue())+dr);

}

}

/**

* 字母有效检查

* 1.检查字母是否都为Z

* 2.检查字母长度

* @param driver

* @param len

* @return

*/

public static String driverCheck(String driver,int len){

char[] charArray = driver.toCharArray();

AtomicInteger z = new AtomicInteger(0);

for (char c : charArray) {

if(c=='Z'){

z.getAndIncrement();

}

}

if(z.intValue()==driver.length() && z.intValue()==len){//如所有字母都为Z,并且长度达到限定长度,返回.N

return ".N";

}else if(z.intValue()==driver.length() && z.intValue()

return driver("@"+driver);

}else{//以上两个条件都不满足,则直接递增

return driver(driver);

}

}

/**

* 字母递增

* @param driver

* @return

*/

public static String driver(String driver){

if(driver!=null && driver.length()>0){

char[] charArray = driver.toCharArray();

AtomicInteger z = new AtomicInteger(0);

for(int i = charArray.length-1;i>-1;i--){

if(charArray[i]=='Z'){

z.set(z.incrementAndGet());

}else{

if(z.intValue()>0 || i==charArray.length-1){

AtomicInteger atomic = new AtomicInteger(charArray[i]);

charArray[i]=(char) atomic.incrementAndGet();

z.set(0);

}

}

}

return String.valueOf(charArray);

}else{

return "A";

}

}

public static void main(String[] args) {

sn(3, 999, "Z");

}

}

java 数字 字母 递增_JAVA流水号生成规则(按默认规则递增,数字不够添加字母递增,位数不够自动加1)...相关推荐

  1. java 字母随机数_java如何生成指定长度的随机数字和英文的字符串

    最后贴一下完成的工具类代码 import java.util.Random; public class GeneId { /** * 随机生成包含大小写字母及数字的字符串 * @param lengt ...

  2. java 唯一流水号_JAVA流水号生成规格,采用同步单例生成,保证永远唯一

    流水号格式为yyyyMMddXXXX,规定每天只能到9999,代码如下: 01 import java.text.DecimalFormat; 02 import java.text.SimpleDa ...

  3. java 8位随机数_JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 1 public static String getRandom1(intlen) {2 int rs = ...

  4. java override 访问权限_java 重写(Override)的规则

    遵循的规则: [1]访问修饰符的限制一定要不小于被重写方法的访问修饰符 比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记Public修饰符,出错的原因就是:没有加 ...

  5. java 调用word插件_java一键生成word操作,比poi简单

    [Java] 纯文本查看 复制代码package com.jeeplus.modules.fact.util; import java.io.BufferedInputStream; import j ...

  6. java中自定义比较器_Java中的比较器:自定义规则!!!

    比较器 Java语言中的比较器分为两种: Comparable比较器:Comparable是排序接口:若一个类实现了Comparable接口,就意味着"该类支持排序".(作用在实体 ...

  7. java 头像 微信群_java怎么生成带用户微信头像的图片,并把这张图片发送给用户。...

    展开全部 这个是要一个图片中嵌套另外一张图片 你可以62616964757a686964616fe59b9ee7ad9431333431336163试试下面这段代码import java.awt.Co ...

  8. java导出csv文件_java导出生成csv文件的方法

    本文实例为大家分享了java导出生成csv文件的具体代码,供大家参考,具体内容如下 首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分 ...

  9. java 流水账号生成器_Java流水生成工具

    package com.serialnumber; import java.text.SimpleDateFormat; import java.util.Date; import org.apach ...

最新文章

  1. 修改android studio中的avd sdk路径、avd sdk找不到的解决方案
  2. 洛谷 P3112 [USACO14DEC]后卫马克Guard Mark
  3. 区块链BaaS云服务(35)亦笔科技ODRChain使用场景
  4. php如何在mysql数据库里创建表_php创建mysql数据库以及数据表
  5. ## 7.3 奇异值分解的几何意义
  6. list.size为1但是内容为null
  7. python读单行文本求平均值_如何从文本文件python中的数字列表中找到平均值
  8. 电商小程序 -- 商品多规格选择弹框
  9. 我只是bug的搬运工之jsp 编辑预览时样式可以显示出来,而在浏览器浏览时无法显示出来!
  10. Python之常用函数小结
  11. 怎么颈椎和秃头都扯上我,程序员:我太难了…
  12. 【理财】【学校财务信息管理系统】一卡通网络金融化
  13. 【新技术】 移动支付过程中的NFC技术
  14. vue热敏打印机_java+lodop+vue+热敏打印机,打印图片
  15. java 线程阻止_Java:在特定队列大小后阻止提交的ExecutorService
  16. JDK下载安装及环境变量配置指南(Window系统)
  17. Altium的基本使用方法
  18. 如何在小米9 se(安卓9)安装Xposed框架?
  19. w10的计算机图标在桌面显示,一学就会的win10桌面怎么显示我的电脑图标方法
  20. 自然语言处理NLP学习笔记三:使用Django做一个NLP的Web站点

热门文章

  1. java 如何读取txt文件并添加换行符
  2. 键盘小钢琴[C语言][自制]
  3. 学习云计算费用大概多少 一般需要多长时间
  4. 【软件工程师日语】04.邮件(1)
  5. oracle法文,圣经-法语版
  6. Seeeduino XIAO入门详解
  7. Linux的快速轻型桌面
  8. thinkphp3.1.3 getshell_C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解_C#教程...
  9. 注意力机制详解系列(一):注意力机制概述
  10. Flash中的隔离沙箱