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

本文介绍了如何在Java中实现一种特殊的流水号生成规则:数字递增至最大后切换到字母递增,直到字母也达到最大值后增加长度。提供了一个示例类`SeriNumber`,包含字母检查和递增的方法,用于生成限定长度的流水号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

业务要求:

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");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值