如何递增和递减字母数字字符串对于给定的范围是多少?

问题描述 投票:0回答:1

我需要优化的解决方案,以增加和减少的字母数字字符串值作为我们在Excel做。当我指定与范围字母数字字符串,那么就应该给我值都递减递增n列表。对于e.g我需要的+ -10字母数字串作为范围。 PN - 字母字符可能会在开始/中间/结束

 1. A2000018 -> A2000008 to A2000028  
 2. A39999 -> A39989 to A40009  
 3. A00005 -> A00001 to A00015  
 4. AZ00005 -> AZ00001 to AZ00015
 5. A342S0004 -> A342S0001 to A342S0014
 6. A342S9999 -> A342S9989 to A342S10009
 7. 1234A -> 1224A to 1244A
 8. 0003A -> 0001A to 0013A
string increment auto
1个回答
0
投票
public static List<String> getRangeList(String docNumber, int range) {

    List<String> rangeList = new ArrayList<>();

    System.out.println("Document Number Received " + docNumber);

    /**
     * REGEX checks for String value starting with 1 character as alpha and rest numeric
     */
    boolean trailingAlphabet = false;
    boolean leadingNtrailingAlphabet = false;
    boolean leadingNtrailingNumber = false;
    String patternStr = "";

    if (docNumber.trim().matches("[a-zA-Z]{1,5}[0-9]{1,20}[a-zA-Z]{1,5}$")) { //String docNumber = "AD234SD1234 ";
        patternStr = "(.*?)(\\d+)(.*?)$";
        leadingNtrailingAlphabet = true;

    } else if (docNumber.trim().matches("[0-9]{1,20}[a-zA-Z]{1,5}[0-9]{1,20}+$")) { //String docNumber = "1234AD1234 ";
        patternStr = "(\\d+)(.*?)(\\d+)$";
        leadingNtrailingNumber = true;
    }  else if (docNumber.trim().matches("[0-9]{1,20}[a-zA-Z]{1,4}+$")) { //String docNumber = "1234A ";
        patternStr = "(\\d+)(.*?)$";
        trailingAlphabet = true;
    } else if (docNumber.trim().matches("[a-zA-Z]{1,5}[0-9]+$")
            || docNumber.trim().matches("[a-zA-Z]{1,5}[0-9]{1,20}[a-zA-Z]{1,4}[0-9]+$")) { 
        patternStr = "(.*?)(\\d+)$";

    }

    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(docNumber.trim());

    if (matcher.find()) {

        String firstAlpha = "";
        String origNumber = "";
        String lastAlpha = "";

        if (trailingAlphabet) {
            firstAlpha = matcher.group(2);
            origNumber = matcher.group(1);

        } else if (leadingNtrailingAlphabet) {
            firstAlpha = matcher.group(1);
            origNumber = matcher.group(2);
            lastAlpha = matcher.group(3);

        } else if (leadingNtrailingNumber) {
            firstAlpha = matcher.group(1);
            lastAlpha = matcher.group(2);
            origNumber = matcher.group(3);

        } else {
            firstAlpha = matcher.group(1);
            origNumber = matcher.group(2);
        }
        //System.out.println("1 Alpha : " + firstAlpha + " origNNum : " + origNumber + " lastAlpha : " + lastAlpha);

        String incrNumStr = origNumber;
        String dcrNumStr = origNumber;

        for (int i = 0; i < range; i++) {

            if (Integer.parseInt(dcrNumStr) - 1 <= 0) {
                break;
            }

            dcrNumStr = String.format("%0" + dcrNumStr.length() + "d", Integer.parseInt(dcrNumStr) - 1);

            if (leadingNtrailingNumber) {
                rangeList.add(firstAlpha + lastAlpha + dcrNumStr);
            } else if (leadingNtrailingAlphabet) {
                rangeList.add(firstAlpha + dcrNumStr + lastAlpha);
            } else if (trailingAlphabet) {
                rangeList.add(dcrNumStr + firstAlpha);
            } else {
                rangeList.add(firstAlpha + dcrNumStr);
            }
        }

        for (int i = 0; i < range; i++) {
            incrNumStr = String.format("%0" + incrNumStr.length() + "d", Integer.parseInt(incrNumStr) + 1);

            if (leadingNtrailingNumber) {
                rangeList.add(firstAlpha + lastAlpha + incrNumStr);
            } else if (leadingNtrailingAlphabet) {
                rangeList.add(firstAlpha + incrNumStr + lastAlpha);
            } else if (trailingAlphabet) {
                rangeList.add(incrNumStr + firstAlpha);
            } else {
                rangeList.add(firstAlpha + incrNumStr);
            }
        }

        Collections.sort(rangeList);
        System.out.println(rangeList);
    }

    return rangeList;

}
© www.soinside.com 2019 - 2024. All rights reserved.