鱼C论坛

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

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

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

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

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

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

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

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

  19. //        String fileName = "ABZ";
  20. //
  21. //        double numberByUpAlphaCode = getNumberByUpAlphaCode(fileName);
  22. //        System.out.println(numberByUpAlphaCode);
  23. //        System.out.println(getUpAlphaCode1(753L, true));
  24.     }

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

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

  32.         return sum;
  33.     }

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

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

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

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

  48.         char endLog = 0;
  49.         if(number%26 == 0){
  50.             endLog = 'Z';
  51.             number -= 1;
  52.         }else{
  53.             endLog = (char) ('A' + number%26 - 1);
  54.         }

  55.         number /= 26;
  56.         if(number - 1 == 0){
  57.             return getUpAlphaCode1(number, false)+endLog;
  58.         }

  59.         if(number - 1 < 0) return "" + endLog;
  60.         return getUpAlphaCode1(number, false) + endLog;
  61.     }
  62. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

让我们来看看代码的详细解释:

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

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

  8.     return sum;
  9. }
复制代码


这个方法接收一个英文字母编码作为参数,返回对应的数字。它使用了循环和幂运算来计算结果,一步步累加每个字母所代表的数字。

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

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

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

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

  15.     char endLog = 0;
  16.     if(number%26 == 0){
  17.         endLog = 'Z';
  18.         number -= 1;
  19.     }else{
  20.         endLog = (char) ('A' + number%26 - 1);
  21.     }

  22.     number /= 26;
  23.     if(number - 1 == 0){
  24.         return getUpAlphaCode1(number, false)+endLog;
  25.     }

  26.     if(number - 1 < 0) return "" + endLog;
  27.     return getUpAlphaCode1(number, false) + endLog;
  28. }
复制代码


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

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

  1. Long[] data = {
  2.     0L/* A */, 1L/* B */, 26L/* AA */, 52L/* BA */, 676L/* ZA */, 702L/* AAA */, 1378L/* BAA */,
  3.     18278L/* AAAA */, 35854L/* BAAA */, 475254L/* AAAAA */, 932230L/* BAAAA */, 8353082582L/* AAAAAAAA */, 16384892758L/* BAAAAAAA */
  4. };

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

  8. for(int i = 0; i < data.length; i++){
  9.     System.out.printf("%-8s\t", getUpAlphaCode1(data[i], true));
  10.     System.out.printf("%.0f\n", getNumberByUpAlphaCode(alphaCodes[i]));
  11. }
复制代码


这段代码会输出以下结果:

  1. A       0
  2. B       1
  3. AA      26
  4. BA      52
  5. ZA      676
  6. AAA     702
  7. BAA     1378
  8. AAAA    18278
  9. BAAA    35854
  10. AAAAA   475254
  11. BAAAA   932230
  12. AAAAAAAA        8353082582
  13. BAAAAAAA        16384892758
复制代码


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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 23:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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