最近做优惠券的系统,需要通过开始编码和数量批量生成编码。
1 /** 2 * 编号字符串拆分 3 * @param startCode 开始号码 4 * @param num 数量 5 * @return 修改后的新号码集合 6 */ 7 public static List<String> trantfromList(String startCode,int num){ 8 startCode = startCode.trim(); 9 List<String> list = new ArrayList<String>(); 10 for(int i=0; i<num; i++){ 11 String a = trantfrom(startCode,"a");//字母 12 String n = trantfrom(startCode,"n");//数字 13 long newN = Long.parseLong(n)+i; 14 String newStr = replenish(startCode,a+newN,a,newN); 15 list.add(newStr); 16 } 17 return list; 18 }
编号进行拆分,分成编码头和数字:
1 /** 2 * 编号字符串拆分 3 * @param code 编号 4 * @param flag 标识 5 * @return 6 */ 7 public static String trantfrom(String code,String flag){ 8 String letter = "^[A-Za-z]+$"; 9 code = code.trim(); 10 if("a".equals(flag)){//取字母 11 for(int i=code.length()-1; i>=0; i--){ 12 if(code.substring(i, i+1).matches(letter)){ 13 return code.substring(0,i+1); 14 } 15 } 16 return ""; 17 }else if("n".equals(flag)){//取数字 18 for(int i=code.length()-1; i>=0; i--){ 19 if(code.substring(i, i+1).matches(letter)){ 20 if(code.substring(i+1)!=null && !code.substring(i+1).isEmpty()){ 21 return code.substring(i+1); 22 }else{ 23 if(i==(code.length()-1)){ 24 return ""; 25 } 26 } 27 } 28 } 29 return code; 30 } 31 return ""; 32 }
最后合成新的字符串:
1 /** 2 * 生成code 3 * @param sNum 开始编号 4 * @param str 编号字母头+(开始编号数字部分+i) 5 * @param a 开始编号数字部分 6 * @param l 当前生成code的数字部分(开始编号数字部分+i) 7 * @return 8 */ 9 public static String replenish(String sNum, String str, String a, long l) { 10 String msg=""; 11 if(sNum.length()-str.length()>0){ 12 for(int i = 0;i<sNum.length()-str.length();i++){ 13 msg = msg+"0"; 14 } 15 return a+msg+String.valueOf(l); 16 }else{ 17 return str; 18 } 19 }
使用方法:
1 public static void main(String[] args) { 2 List<String> list = trantfromList("zk2018yy001",10); 3 for(String s : list){ 4 System.out.println(s); 5 } 6 }
输出结果:
zk2018yy001
zk2018yy002
zk2018yy003
zk2018yy004
zk2018yy005
zk2018yy006
zk2018yy007
zk2018yy008
zk2018yy009
zk2018yy010