编辑代码

import java.util.ArrayList;
import java.util.Collections;

class Main {
	public static void main(String[] args) {
        //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
		System.out.println("Hello world!   - java.jsrun.net ");
        Main main = new Main();
        ArrayList<String> sortedList = new ArrayList<>();
        sortedList.add("1A");
        sortedList.add("33-2");
        sortedList.add("331");
        sortedList.add(null);
        sortedList.add("Bb");
        sortedList.add("D1");
        Collections.sort(sortedList, (vo1, vo2) -> {
            String s1 = main.processSequenceNo(vo1);
            String s2 = main.processSequenceNo(vo2);
            return s1.compareTo(s2);
        });
        System.out.println(sortedList);
	}

    // 最长32位字符串包含字母和数据 按此顺序排:数字、数字+字母、字母+数字、字母
    private String processSequenceNo(String sequenceNo) {
        if ("".equals(sequenceNo) || sequenceNo == null) {
            return "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"; // 空值处理为最大值 排在最后
        }

        // 去掉减号
        sequenceNo = sequenceNo.replace("-", "");

        // 分离字母和数字部分
        String[] parts = sequenceNo.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
        StringBuilder letters = new StringBuilder();
        StringBuilder numbers = new StringBuilder();

        for (String part : parts) {
            if (part.matches("\\d+")) {
                numbers.append(part);
            } else {
                letters.append(part);
            }
        }

        // 字母部分大写处理
        String letterPart = letters.toString().toUpperCase();

        // 数字部分补零(统一补到32位)
        String numberPart = numbers.toString();
        if (!numberPart.isEmpty()) {
            String key = "%" + (32 - letterPart.length()) + "s";
            numberPart = String.format(key, numberPart).replace(' ', '0');
        }
        return letterPart + numberPart;
    }
}