Java generates (date, letters, numbers, Roman numerals, mixed serial numbers, custom digits) incremental serial number tool class.

Serial number auto-increment rules:

Arabic numerals are automatically incremented, English letters are automatically incremented (ignoring upper and lower case), Roman numerals are automatically incremented, and letters + numbers are mixed;
it supports dynamic digits and automatically handles the problem of full digits.

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<len+1;i++) {
                sb.append("A");
            }
            return sb.toString();
        }
        return getEnglishLetter(driver);
    }

    /**
     * 获取递增罗马字符流水号
     * @author lgn
     * @date 2023/4/23 10:37
     * @param c
     * @return String
     */
    public static String getRomanCharacters(String c) {
        c=c.trim();
        int i=romanToInt(c)+1;
        return intToRoman(i);
    }

    /**
     * 数字流水+1 自增
     * @author lgn
     * @date 2023/4/23 11:12
     * @param oldNum 旧字段
     * @param digit 位数
     * @return String
     */
    public static String getOldNum(String oldNum,String digit){
        if (StringUtils.isNotEmpty(oldNum) &&  StringUtils.isNotEmpty(digit)){
            //String oldNum ="0001";
            //String maxOldNum = "9999";
            //%nd 输出的整型宽度至少为n位,右对齐,%4d即宽度至少为4位,位数大于4则输出实际位数,0表示用0补齐
            //String digitFormat="%04d";
            String digitFormat="%0"+digit+"d";

            if(null !=oldNum){
                int i = Integer.parseInt(oldNum)+1;
                oldNum = String.format(digitFormat, i);
            }
        }
        return oldNum;
    }

    /**
     * 一些id标识的要求,比如数字自增,0001,0002,0003等。下面这个方法实现了这个功能:
     * 思路:int a;a++;fillstr();
     * @author lgn
     * @date 2023/4/23 10:54
     * @param value
     * @param count 总长度
     * @param frontORback 头部 尾部拼接
     * @param fillChar 补位显示
     * @return String
     */
    private static String fillStr(String value, int count, boolean frontORback, String fillChar) {
        String rtvalue = value;
        if (rtvalue == null) {
            rtvalue = "";
            for (int i = 0; i < count; i++)
                if (frontORback)
                    rtvalue = String.valueOf(rtvalue)
                            + String.valueOf(fillChar);
                else
                    rtvalue = String.valueOf(fillChar)
                            + String.valueOf(rtvalue);
        } else {
            int len = rtvalue.length();
            if (len > 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);
                    else
                        rtvalue = 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<String, Integer> 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<Integer, String> 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.length; i++){
                if(num>=digits[i]){
                    res += maps.get(digits[i]);
                    num -= digits[i];
                    break;
                }
            }
        }
        return res;
    }

    //求差集,属于str但是不属于pa
    public 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<strc.length;i++)
            list1.add(strc[i]);
        for(int j=0;j<pac.length;j++)
            list2.add(pac[j]);
        for(int k =0;k<list2.size();k++){
            if(list1.contains(list2.get(k))){
                list1.remove(list2.get(k));
            }
        }
        String stringFromList = StringUtils.join(list1,"");
        return stringFromList;
    }

    public static void main(String[] args) {
/*        String outString="";
        outString=fillStr("1", 4, false, "0");
        System.out.println("false:"+outString);
        outString=fillStr("1", 4, true, "0");
        System.out.println("true:"+outString);*/


        System.out.println("======阿拉伯数字自增======"+getOldNum("9999","4"));

        System.out.println("======英文字母自增======"+getEnglishLetter("az"));

        System.out.println("======英文字母自增满位进一位======"+driverCheck("zZZZz",5));

        System.out.println("======int转罗马数字======"+intToRoman(1));
        System.out.println("======罗马数字转int======"+romanToInt("I"));

        System.out.println("=======罗马数字自增=====:"+getRomanCharacters("I"));

        System.out.println("======字母+数字转(数字未满位)======"+getCodeOfSix("aa0001","2","4"));

        System.out.println("======数字自增======"+fillStr("aa",4,true,"0"));
        System.out.println("======字母+数字转(数字满位)======"+getCodeOfSix("aa9999","2","4"));

        List<String> 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, ""));

    }
}

Get the last two digits of the year and month:

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年,则输出19
        String 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"));
    }

}

Guess you like

Origin blog.csdn.net/u010797364/article/details/130596027