Java生成26英文字母编号

Java生成26英文字母编号

public class CaseAlphabetNumber {
    public static void main(String[] args) throws InterruptedException {
        Long[] data = {
                0L/* A */, 1L/* B */, 26L/* AA */, 52L/* BA */, 676L/* ZA */, 702L/* AAA */, 1378L/* BAA */,
                18278L/* AAAA */, 35854L/* BAAA */, 475254L/* AAAAA */, 932230L/* BAAAA */, 8353082582L/* AAAAAAAA */, 16384892758L/* BAAAAAAA */
        };

        String[] alphaCodes = {
                "A", "B", "AA", "BA", "ZA", "AAA", "BAA", "AAAA", "BAAA", "AAAAA", "BAAAA", "AAAAAAAA", "BAAAAAAA"
        };

        for(int i = 0; i < data.length; i++){
            System.out.printf("%-8s\t", getUpAlphaCode1(data[i], true));
            System.out.printf("%.0f\n", getNumberByUpAlphaCode(alphaCodes[i]));
        }
//        for (int i = 0; i < 500000; i++){
//            System.out.println(i + " " + getUpAlphaCode1(i, true));
//
//            Thread.sleep(1);
//        }

//        String fileName = "ABZ";
//
//        double numberByUpAlphaCode = getNumberByUpAlphaCode(fileName);
//        System.out.println(numberByUpAlphaCode);
//        System.out.println(getUpAlphaCode1(753L, true));
    }

    public static double getNumberByUpAlphaCode(String alphaCode){
        double sum = 0.0;
        int i = 0;

        for(i = 0; i < alphaCode.length() - 1; i++){
            sum += (alphaCode.charAt(i) - 'A' + 1) * Math.pow(26, alphaCode.length() - 1 -i);
        }
        sum += alphaCode.charAt(i) - 'A';

        return sum;
    }

    public static String getUpAlphaCode1(Long number, boolean isStart){
        String strCode = "";

        // 当数字小于 26
        if(isStart && number < 26){
            return "" + (char)('A' + (number%26));
        }

        // 当这是第一次开始循环
        if(isStart){
            char tch =  (char)('A' + (number % 26));
            strCode = getUpAlphaCode1(number/26, false) + tch;
            return strCode;
        }

        // 当数字是 1 时
        if(number == 1) return "A";

        char endLog = 0;
        if(number%26 == 0){
            endLog = 'Z';
            number -= 1;
        }else{
            endLog = (char) ('A' + number%26 - 1);
        }

        number /= 26;
        if(number - 1 == 0){
            return getUpAlphaCode1(number, false)+endLog;
        }

        if(number - 1 < 0) return "" + endLog;
        return getUpAlphaCode1(number, false) + endLog;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值