Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字母转换为数字_Java - Fatal编程技术网

Java 将字母转换为数字

Java 将字母转换为数字,java,Java,我想把字母A改为点1,所以字母Z是数字26,然后再改为数字27,字母AA,字母AB改为28。我该怎么办?我必须使用“开关”吗?我使用java程序。没有测试这一点,但按照以下思路应该可以工作: public String numberToCharacterRepresentation(int number) { char[] ls = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); String r = ""; while(true) {

我想把字母A改为点1,所以字母Z是数字26,然后再改为数字27,字母AA,字母AB改为28。我该怎么办?我必须使用“开关”吗?我使用java程序。

没有测试这一点,但按照以下思路应该可以工作:

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;
}
公共字符串数字字符表示法(整数){
char[]ls=“abcdefghijklmnopqrstuvxyz.toCharArray();
字符串r=“”;
while(true){
r=ls[编号%26]+r;
如果(数字<26){
打破
}
数目/=26;
}
返回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;
}
public int stringToNumber(字符串str){
char[]ls=“abcdefghijklmnopqrstuvxyz.toCharArray();
Map m=新的HashMap();
int j=0;
for(字符c:ls){
m、 put(c,j++);
}
int i=0;
int mul=1;
for(char c:new-StringBuffer(str).reverse().toString().toCharray()){
i+=m.get(c)*mul;
mul*=ls.长度;
}
返回i;
}

使用c-'A'+1将c中的字母转换为您想要的数字怎么样?计算下一个位置将是相同的,除了添加27。基本上,你要做的就是把一个基数为26的数字转换成十进制,除非你没有零。

这就可以了

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;
}
公共字符串映射(int i){
字符串res=“”;
如果(i 0){
res=字符.toString('A'+((i-1)%26))+res;
i=i/26;
}
返回res;
}

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

也许A-Z最简单的方法是:

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

对于AA、BB等,这将取决于您需要多少组合。设置映射可能是最快的,但如果可能性无限,则必须找出一些公式。

使用Character对象0=>0a=>10,等等如果只使用字母,则减去10

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

一个简单的解决办法是把这个问题看成是写字母而不是数字

public static String asLetters(long num) {
   StringBuilder sb = new StringBuilder();
   while(num > 0) {
      sb.append((char) ('@' + num % 26));
      num /= 26;
   }
   return sb.toString();
}
import javax.swing.JOptionPane;
公共类TBesar{
公共静态长x(整数a,整数b){
如果(b==0){
申报表(1);
}
否则{
申报表(a*(x(a,(b-1));
}
}
公共静态长Katakangka(字符串nama){
int A=0;
int B=26;
长C=0;
长Z;
int panjang=nama.length();
char namas[]=新char[panjang];

对于(int i=0;i对于希望在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;
}

这将适用于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;
}

首先,你必须定义“改变”。然后你必须告诉我们你尝试了什么,什么不起作用。这对任何长度的字符串都有效吗?你能帮助我如何将快照java放在这里吗?你可能会想:因为这个操作是相反的。事实上,投票通过了——这正好解决了一半的问题。哇,谢谢:D。但是如何转换下一个字母示例AA=27,AB=28,AC=29,AD=30?如何制作这样的java快照?@Jonathon感谢您的精彩编辑!@Leostrada StringtonNumber应该给您相反的信息。您应该阅读有关数字基转换的内容,因为这基本上是从base-26到base-10的转换。下面是一个示例链接:如何制作这样的java快照?@Leostrada-我不知道理解你的问题。@Leostrada-假设你是这么问的,那么答案是将每行代码缩进至少4个空格字符,而不是使用制表符。c-'a'+1表示如果我写AA,那么将转换为27?出于兴趣,@?嗨,Arif,欢迎使用SO,谢谢你的回答。To使您的答案更有用,您是否介意编辑它(编辑答案下方的链接)以添加此代码解决问题的原因的解释?它将帮助人们学习并将解决方案应用到其他情况,而不仅仅是鼓励复制粘贴编码。再次感谢!
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;
}