Java生成(日期、字母,数字,罗马数字,混合流水,自定义位数)递增流水号工具类。

流水号自增规则:

阿拉伯数字自增,英文字母自增(忽略大小写),罗马数字自增,字母+数字混合流水;
支持动态位数,自动处理满位问题。

package com.jeeplus.codingrules.utils;import org.apache.commons.lang.StringUtils;import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;/*** 算法工具类* @author lgn* @date 2023/4/23 10:32*/
public class AlgorithmUtils {/*** 获取英文字母流水号* @author lgn* @date 2023/4/23 10:51* @param c* @return String*/public static String getEnglishLetter(String c) {c=c.trim();char [] tempChar = c.toCharArray();for(int i =tempChar.length-1;i>=1;i--){if (tempChar[i]<'z' ){tempChar[i]=(char)(tempChar[i]+1);break;}else {tempChar[i]='a';tempChar[i-1]=(char)(tempChar[i-1]+1);if (tempChar[i-1]<='z'){i=0;}}}return String.valueOf(tempChar);}/*** 字母有效检查* 1.检查字母是否都为Z* 2.检查字母长度* @param driver* @param len* @return*/public static String driverCheck(String driver,int len){char[] charArray = driver.toCharArray();List list=new ArrayList();for (char c : charArray) {if(c=='Z' || c=='z'){list.add(1);}}if(list.size()==driver.length() && list.size()==len){//如所有字母都为Z,并且长度达到限定长度,长度自增一位StringBuffer sb=new StringBuffer();for (int i=0;i count) {rtvalue = rtvalue.substring(0, count);} else {int a = count - len;for (int i = 0; i < a; i++)if (frontORback)rtvalue = String.valueOf(rtvalue)+ String.valueOf(fillChar);elsertvalue = String.valueOf(fillChar)+ String.valueOf(rtvalue);}}return rtvalue;}/*** 将数值拼接成对应的位数* @param oldValue  前缀:aa0001* @param elDigit  英文的位数* @param numDigit  数字的位数* @return 拼接好的流水号*/public static String getCodeOfSix(String oldValue,String elDigit,String numDigit) {String el =oldValue.substring(0,Integer.valueOf(elDigit));String oldNumSo=oldValue.substring(Integer.valueOf(elDigit));String newCode="";String newNum=getOldNum(oldNumSo,numDigit);//数字先递增if (newNum.length()>Integer.valueOf(numDigit)){//数字位数已满,字母进位//fillStr("aa",6,true,"0");newCode=fillStr(getEnglishLetter(el),Integer.valueOf(elDigit)+Integer.valueOf(numDigit)-1,true,"0")+"1";}else {newCode=el+newNum;}return newCode;}/*** 罗马数字转阿拉伯数字* @author lgn* @date 2023/4/23 10:41* @param s* @return int*/public static int romanToInt(String s) {HashMap map = new HashMap<>();map.put("I", 1);map.put("V", 5);map.put("X", 10);map.put("L", 50);map.put("C", 100);map.put("D", 500);map.put("M", 1000);map.put("IV", 4);map.put("IX", 9);map.put("XL", 40);map.put("XC", 90);map.put("CD", 400);map.put("CM", 900);int res = 0;int idx = 0;while (idx < s.length()) {if (idx + 1 < s.length() && map.containsKey(s.substring(idx, idx + 2))) {res += map.get(s.substring(idx, idx + 2));idx += 2;} else {res += map.get(s.substring(idx, idx + 1));idx++;}}return res;}/*** 阿拉伯数字转罗马数字* @author lgn* @date 2023/4/23 10:43* @param num* @return String*/public static String intToRoman(int num) {HashMap maps = new HashMap<>();maps.put(1, "I");maps.put(5, "V");maps.put(10, "X");//maps.put(50, "L");//maps.put(100, "C"); //maps.put(500, "D");//maps.put(1000, "M");//maps.put(4, "IV");maps.put(9, "IX");//maps.put(40, "XL");//maps.put(90, "XC");//maps.put(400, "CD");//maps.put(900, "CM");//String res = "";int[] digits = new int[13];digits[0] = 1000;digits[1] = 900;digits[2] = 500;digits[3] = 400;digits[4] = 100;digits[5] = 90;digits[6] = 50;digits[7] = 40;digits[8] = 10;digits[9] = 9;digits[10] = 5;digits[11] = 4;digits[12] = 1;while(num>0){for(int i=0; i=digits[i]){res += maps.get(digits[i]);num -= digits[i];break;}}}return res;}//求差集,属于str但是不属于papublic static String DifferentSet(String str,String pa){if(str==null || str.length()==0 || pa==null || pa.length()==0) return "";ArrayList list1 = new ArrayList();ArrayList list2 = new ArrayList();char strc[] = str.toCharArray();char pac[] = pa.toCharArray();HashSet set = new HashSet();for(int i=0;i list = new ArrayList<>();list.add("1");list.add("a");list.add("3");list.add("c");System.out.println(StringUtils.join(list, ","));System.out.println(StringUtils.join(list, ""));}
}

获取后两位 年份 月份:

package com.jeeplus.codingrules.utils;import org.apache.commons.lang.StringUtils;import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;public class DateUtils {/*** 获取当前年份的后两位* @author lgn* @date 2023/4/21 9:29* @return String*/public static String getHalfYear() {//当前是2020年,则输出20//当前是2019年,则输出19String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());return year;}/*** 月份和天不足两位时补上0* @author lgn* @date 2023/4/21 9:42* @return String*/public static String getRepairMonthOrDay(String flag) {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());int month = calendar.get(Calendar.MONTH) + 1;int day = calendar.get(Calendar.DAY_OF_MONTH);/*        String normalizeMonth = StringUtils.leftPad(String.valueOf(calendar.get(Calendar.MONTH) + 1), 2, '0');String normalizeDay = StringUtils.leftPad(String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)), 2, '0');System.out.printf("当前月份:%s,当前几号:%s%n", normalizeMonth, normalizeDay);*/String normalize="";if ("month".equals(flag)){normalize= StringUtils.leftPad(String.valueOf(calendar.get(Calendar.MONTH) + 1), 2, '0');}else {normalize = StringUtils.leftPad(String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)), 2, '0');}return normalize;}public static void main(String[] args) {System.out.println(getRepairMonthOrDay("month"));}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部