鱼C论坛

 找回密码
 立即注册
查看: 454|回复: 1

[技术交流] Java生成26英文字母编号

[复制链接]
发表于 2024-2-10 22:45:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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;
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-10 22:46:08 | 显示全部楼层
这是一段Java代码,用于生成26个英文字母的编号。代码中有两个方法,一个是通过英文字母编码获取相应的数字,另一个是通过数字获取相应的英文字母编码。

让我们来看看代码的详细解释:
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;
}

这个方法接收一个数字和一个布尔值作为参数,返回对应的英文字母编码。它使用了递归来生成每个字母的编码,一步步拼接结果。

在`main`方法中,我们可以使用这两个方法来执行一些测试。现在我给你一段代码,它将循环遍历预定义的一些数据并输出相应的英文字母编码和数字:
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]));
}

这段代码会输出以下结果:
A       0
B       1
AA      26
BA      52
ZA      676
AAA     702
BAA     1378
AAAA    18278
BAAA    35854
AAAAA   475254
BAAAA   932230
AAAAAAAA        8353082582
BAAAAAAA        16384892758

可以看到,每个英文字母编码与对应的数字是一致的。

希望这段代码能够帮助你解决问题!如果还有其他问题,欢迎继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 02:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表