将字母转换为数字

时间:2010-11-24 00:58:33

标签: java

我想将字母A更改为第1点,因此字母Z为数字26,然后再次更改为数字27字母AA,AB为28.我如何?我必须使用“开关”吗?我使用java程序。

9 个答案:

答案 0 :(得分:9)

没有测试过,但这些内容应该有效:

public String numberToCharacterRepresentation(int number) {
  char[] ls = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
  String r = "";
  while(true) {
    r = ls[number % 26] + r;
    if(number < 26) {
      break;
    }
    number /= 26;
  }
  return r;
}

相反:

public int stringToNumber(String str) {
  char[] ls = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
  Map<Character, Integer> m = new HashMap<Character, Integer>();
  int j = 0;
  for(char c: ls) {
    m.put(c, j++);
  }
  int i = 0;
  int mul = 1;
  for(char c: new StringBuffer(str).reverse().toString().toCharArray()) {
    i += m.get(c) * mul;
    mul *= ls.length;
  }
  return i;
}

答案 1 :(得分:1)

使用Character对象0 =&gt; 0 a =&gt; 10等等如果你只使用字母然后减去10

Character.forDigit(10,Character.MAX_RADIX) //will return 'a'
Character.getNumericValue('a') // will return 10

答案 2 :(得分:1)

一个简单的解决方案是将问题视为写字母而不是数字。

public static String asLetters(long num) {
   StringBuilder sb = new StringBuilder();
   while(num > 0) {
      sb.append((char) ('@' + num % 26));
      num /= 26;
   }
   return sb.toString();
}

答案 3 :(得分:1)

对于那些想要为Excel执行此操作的人:

public String getEquivColumn(int number){
    String converted = "";
    // Repeatedly divide the number by 26 and convert the
    // remainder into the appropriate letter.
    while (number >= 0)
    {
        int remainder = number % 26;
        converted = (char)(remainder + 'A') + converted;
        number = (number / 26) - 1;
    }

    return converted;
}

答案 4 :(得分:0)

如何使用c-'A'+ 1将c中的字母转换为您想要的数字?计算下一个地方将是相同的,除了添加27。基本上你正在做的是将base-26数字转换为十进制数,除非你没有零。

答案 5 :(得分:0)

这将完成这项工作。

public String map(int i) {
    String res = "";
    if (i <= 0) {
        throw new IllegalArgumentException("Can only map +ve numbers");
    }
    while (i > 0) {
        res = Character.toString('A' + ((i - 1) % 26)) + res;
        i = i / 26;
    }
    return res;
}

使用StringBuilder的更复杂的版本会更有效,但这个更容易理解。

答案 6 :(得分:0)

对于A-Z来说,最简单的方法可能是:

char c = *whatever letter you need*;
int cAsInt = Integer.toString(c - '@');  // @ is 1 less than A

对于像AA,BB等这样的东西,它取决于你需要多少组合。设置映射可能是最快的,但如果可能性是无穷无尽的,那么你必须找出一些公式。

答案 7 :(得分:0)

import javax.swing.JOptionPane;

public class TBesar{

    public static long x(int a, int b){
        if (b==0){
            return(1);
        }
        else{
            return(a*(x(a,(b-1))));
        }
    }
    public static long KatakeAngka(String nama){
        int A = 0;
        int B = 26;
        long C = 0;
        long Z;
        int panjang = nama.length();
        char namas[] = new char[panjang];
        for (int i=0;i<panjang;i++){
        namas[i] = nama.charAt(i);
            switch (namas[i]){  
                case 'a' : A=1;break;
                case 'b' : A=2;break;
                case 'c' : A=3;break;
                case 'd' : A=4;break;
                case 'e' : A=5;break;
                case 'f' : A=6;break;
                case 'g' : A=7;break;
                case 'h' : A=8;break;
                case 'i' : A=9;break;
                case 'j' : A=10;break;
                case 'k' : A=11;break;
                case 'l' : A=12;break;
                case 'm' : A=13;break;
                case 'n' : A=14;break;
                case 'o' : A=15;break;
                case 'p' : A=16;break;
                case 'q' : A=17;break;
                case 'r' : A=18;break;
                case 's' : A=19;break;
                case 't' : A=20;break;
                case 'u' : A=21;break;
                case 'v' : A=22;break;
                case 'x' : A=23;break;
                case 'w' : A=24;break;
                case 'y' : A=25;break;
                case 'z' : A=26;break;
            }
            int D = panjang-(i+1);
            Z = (x(B,D))*A;
            C = C+Z;
        }return(C);
    }
    public static String hitung(long angka){
        String B ;
        if(angka<27){
            if(angka==1){
                B="a";
            }else if(angka==2){
                B="b";
            }else if(angka==3){
                B="c";
            }else if(angka==4){
                B="d";
            }else if(angka==5){
                B="e";
            }else if(angka==6){
                B="f";
            }else if(angka==7){
                B="g";
            }else if(angka==8){
                B="h";
            }else if(angka==9){
                B="i";
            }else if(angka==10){
                B="j";
            }else if(angka==11){
                B="k";
            }else if(angka==12){
                B="l";
            }else if(angka==13){
                B="m";
            }else if(angka==14){
                B="n";
            }else if(angka==15){
                B="o";
            }else if(angka==16){
                B="p";
            }else if(angka==17){
                B="q";
            }else if(angka==18){
                B="r";
            }else if(angka==19){
                B="s";
            }else if(angka==20){
                B="t";
            }else if(angka==21){
                B="u";
            }else if(angka==22){
                B="v";
            }else if(angka==23){
                B="w";
            }else if(angka==24){
                B="x";
            }else if(angka==25){
                B="y";
            }else{B="z";}
            return(B);
        }
        else{
            return(hitung(angka/26)+hitung(angka%26));
        }
    }
    public static void main (String [] args){
        String kata = JOptionPane.showInputDialog(null,"Masukkan Kata ke 1");
        String kata2 = JOptionPane.showInputDialog(null, "Masukkan Kata ke 2");
        long hasil = KatakeAngka(kata);
        long hasil2 = KatakeAngka(kata2);
        long total = hasil+hasil2;

        String HasilKata = hitung(total);
        JOptionPane.showMessageDialog(null,kata+" = "+hasil+"\n"+kata2+" = "+hasil2+"\n"+kata+" + "+kata2+" = "+HasilKata);
    }
}

答案 8 :(得分:0)

这适用于A到ZZ:

public static int columnCharToNumber(String str) {
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    if(str.length() == 1) {
        return alphabet.indexOf(str);
    }
    if(str.length() == 2) {
        return ( alphabet.indexOf(str.substring(1)) + 26*(1+alphabet.indexOf(str.substring(0,1)))) ;
    }
    return -1;
}