Java Excel转换列号(0 based)为字母索引

本文探讨了如何使用字符串缓冲区和循环结构,通过计算26进制来表示字母表的扩展版本(A-Z,共52个字符),并展示了如何将每个字符映射到相应的26进制数,最后逆序输出结果。
char[] letters={
                'A','B','C','D','E','F','G',
                'H','I','J','K','L','M','N',
                'O','P','Q','R','S','T','U',
                'V','W','X','Y','Z'
        };

        StringBuffer sb = new StringBuffer();
//        int column = 26;
        int column = 52;
        int columnSize = column+1;

        for(int letterLen=1;;letterLen++){
            //-26-26*26-26*26*26-...
            // Z   ZZ   ZZZ
            //其实 A=0 AA=00 AAA=000 其他长度同理
            //所以每一个都是从0开始的计算的
            //所以要把前面的26倍数的数减去,然后进行进制计算
            int surplus = columnSize - Pointer.pow(letters.length,letterLen);
            if(surplus<=0){
                //列的索引也是从0开始的,与转换后的进制同索引,A是0,B是1 重要,
                //想想数字的进制转换
                int columnIdx = columnSize-1;
                //其实 A=0 AA=00 AAA=000 其他长度同理
                //所以每一个都是从0开始的计算的
                //26进制计算
                do{
                    int remainder = columnIdx % letters.length;
                    sb.append(letters[remainder]);
                    columnIdx = columnIdx/letters.length;
                }while(columnIdx > 0);
                //字母长度不够,要用第一位填充,也就是A
                int diffLen = letterLen - sb.length();
                if(diffLen>0){
                    for(int i=0;i<diffLen;i++){
                        sb.append(letters[0]);
                    }
                }
                sb.reverse();
                break;
            }
            columnSize=surplus;
        }

        Pointer.lg(sb);
BA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值