Java 将字母转换为数字
我想把字母A改为点1,所以字母Z是数字26,然后再改为数字27,字母AA,字母AB改为28。我该怎么办?我必须使用“开关”吗?我使用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) {
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;
}