编号合并和拆解工具类?

我已经实现了部分功能,但是有一些特殊的编号没办法处理,

1.编号拆解

方法接受两个参数1.(字符串类型)编号,参数2.(字符串类型)分隔符
假如用户输入参数1A01~99参数2~,希望输出结果为[A01,A02,A03...A98,A99]的集合,这个功能已经实现,但是如果用户输入A01~100A01A~100A这样的编号我就不会处理了

2.编号合并

方法接受两个参数1.(集合类型)编号,参数2.(字符串类型)分隔符
假如用户输入参数1[A01A,A02A,A03A...A98A,A99A,A100A]参数2~,希望得到结果为A01A~100A,这个方法我不会实现

有一处需要补充,
编号可能为A00啊-01A~100A 期望得到结果为[A00啊-01A,A00啊-02A,A00啊-03A...A00啊-99A,A00啊-100A]
编号可能为A00啊-1A~100A 期望得到结果为[A00啊-1A,A00啊-2A,A00啊-3A...A00啊-99A,A00啊-100A]

package com.eleven;

import java.util.ArrayList;
import java.util.List;

public class ElevenTest {
    public static void main(String[] args) {
        List<String> list = splitMethod("A01B~100B", "~");
        System.out.println(list);
        String str = mergeMethod(list, "~");
        System.out.println(str);
    }

    public static List<String> splitMethod(String str,String splitStr){
        List<String> list = new ArrayList<>();
        String firstChar = str.charAt(0) + "";
        char lastChar = str.charAt(str.length() - 1);
        str = str.replaceFirst(firstChar, "");
        String[] split = str.split(splitStr);
        for(int i = getNumByStr(split[0]); i <= getNumByStr(split[1]);i++){
            list.add(new StringBuilder()
                    .append(firstChar)
                    .append(i < 10 ? "0" + i : i)
                    .append(isNum(lastChar) ? "" : lastChar)
                    .toString());
        }
        return list;
    }

    private static boolean isNum(char lastChar){
        return lastChar >= '0' && lastChar <= '9';
    }
    private static Integer getNumByStr(String str){
        return Integer.parseInt(str.replaceAll("[^0-9]", ""));
    }

    public static String mergeMethod(List<String> list,String splitStr){
        String first = list.get(0);
        String last = list.get(list.size() - 1);
        String firstChar = first.charAt(0) + "";
        return new StringBuilder()
                .append(firstChar)
                .append(first.replaceFirst(firstChar, ""))
                .append(splitStr)
                .append(last.replaceFirst(firstChar,""))
                .toString();
    }
}