god圣锋 发表于 2024-2-10 22:45:46

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, true));
            System.out.printf("%.0f\n", getNumberByUpAlphaCode(alphaCodes));
      }
//      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;
    }
}

FishC 发表于 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, true));
    System.out.printf("%.0f\n", getNumberByUpAlphaCode(alphaCodes));
}

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

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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Java生成26英文字母编号