package util; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; public class GetNextNumber { /** * * describe: 按照模版生成编号 * user:choiyubo * date:2017年6月5日下午7:28:59 * @param model 起始编号[2016][0000] * @param oldno 当前的编号 * @param yearStart 时间开始下标(下标从0开始) * @param noStart 编号开始下标(下标从0开始) * @param noLength 编号长度 * @return 新的编号 */ public static String getnextnumber(String model,String oldnumber,int yearStart,int noStart,int noLength){ if(oldnumber==null||oldnumber.length()!=model.length()){//如果没有参数,模版的长度和传入的不一致,则返回模版 oldnumber= model; } StringBuffer newno=new StringBuffer(""); SimpleDateFormat df=new SimpleDateFormat("yyyy"); int year= Integer.valueOf(df.format(new Date())); newno.append(oldnumber.substring(0,yearStart));//时间之前 newno.append(year);//时间 newno.append(oldnumber.substring(yearStart+4,noStart));//时间之后,no之前 int no=Integer.valueOf(oldnumber.substring(noStart,noStart+noLength));//原来的no String modelno=model.substring(noStart,noStart+noLength);//模版的no String newnum=new DecimalFormat(modelno).format(no+1); if(newnum.length()>noLength){ newnum=modelno; } newno.append(newnum);//新的number newno.append(oldnumber.substring(noStart+noLength)); return newno.toString(); } }
测试方法如下
package util; import org.junit.Before; import org.junit.Test; public class GetNextNumberTest { private static GetNextNumber getNextNumber=new GetNextNumber(); @Before public void setUp() throws Exception { } @SuppressWarnings("static-access") @Test public void test() { String model="[2016][00000]";//模版 String oldnumber=null;//当前的编号 String testnumber="[2016][00001]";//预期的结果 int yearStart=1; int noStart=7; int noLength=5; String newnumber=getNextNumber.getnextnumber(model, oldnumber, yearStart, noStart, noLength); assert(testnumber.equals(newnumber)); } }