求一简单数字、字母替换方法

zoutuo 2009-09-29 02:03:26
一个方法,传一个int类型参数,返回一英文字母

例如:1对应A,2对应B...26对应Z

别告诉我要写26个if……有没有好的方法?而且这只是目前状态,以后可能有AA,AB,AC...AX(就是Excel中的头)
我要做的就是将数字转换为字母,各位大侠帮帮忙,谢谢!!
...全文
694 19 打赏 收藏 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoutuo 2009-09-29
  • 打赏
  • 举报
回复
谢谢大家!
justinavril 2009-09-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zoutuo 的回复:]
引用 1 楼 justinavril 的回复:
那AA对应什么数字啊?27?

其实就是一个26进制问题

是的,AA对应27,AB对应28,以此类推
[/Quote]
这个问题已经解决了 有好几组代码 你看看吧
zoutuo 2009-09-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justinavril 的回复:]
那AA对应什么数字啊?27?

其实就是一个26进制问题
[/Quote]
是的,AA对应27,AB对应28,以此类推
haojia0716 2009-09-29
  • 打赏
  • 举报
回复
我给你一个最简单的


public class T {

public static char get(int i) {
if (i > 26 || i < 1) {
throw new RuntimeException("请输入1-26中任意一个整数");
}
return (char) (i + 64);
}

public static void main(String[] args) {
System.out.println(get(1));
}
}
justinavril 2009-09-29
  • 打赏
  • 举报
回复
不好意思 未经严格测试 改了下:
public class LowToUpper {
public static void main(String args[]){
char[] charArray = new char[27];
char temp = 'A';

for(int i=1; i<charArray.length; i++){//避免麻烦从1开始
charArray[i] = temp;
temp ++;
}

int[] intArray = {1, 17, 27, 127, 2397, 12335000};

for(int i=0; i<intArray.length; i++){
StringBuffer sb = new StringBuffer();
if(intArray[i] < 26)
System.out.println(charArray[intArray[i]]);
else{
int first = intArray[i]/26;
int second;
int third = intArray[i]%26;

sb.append(charArray[third]);

while(first > 26){
second = first%26;
first = first/26;

sb.append(charArray[second]);
}
sb.append(charArray[first]);
System.out.println(sb.reverse().toString());
}
}
}
}

输出:
A
Q
AA
DW
CNE
ZYUAB
zhuzeitou 2009-09-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 justinavril 的回复:]
模拟手工计算26进制的过程
Java codepublicclass LowToUpper {publicstaticvoid main(String args[]){char[] charArray=newchar[27];char temp='A';for(int i=1; i<charArray.length; i++){//避免麻烦从1开始 charArray[i]= temp;
temp++;
}int[] intArray= {1,17,27,127,2397};for(int i=0; i<intArray.length; i++){if(intArray[i]<26)
System.out.println(charArray[intArray[i]]);else{int first= intArray[i]/26;int second= intArray[i]%26;while(first>26){
first= first/26;
second= first%26;
System.out.print(charArray[first]);
}
System.out.print(charArray[first]);
System.out.print(charArray[second]+"\n");
}
}
}
}
输出:
Java codeA
Q
AA
DW
CCC
[/Quote]

额,2397的结果我算出来不太一样额………………
我和大虫前辈算出来都是CNE
bigbug9002 2009-09-29
  • 打赏
  • 举报
回复
2397是CNE
bigbug9002 2009-09-29
  • 打赏
  • 举报
回复
我的代码2397是CEN.
shine333 2009-09-29
  • 打赏
  • 举报
回复
char c;

int x = c - 'A' + 1
hardycheng 2009-09-29
  • 打赏
  • 举报
回复
转换ascII 绝对速度解决
justinavril 2009-09-29
  • 打赏
  • 举报
回复
模拟手工计算26进制的过程
public class LowToUpper {
public static void main(String args[]){
char[] charArray = new char[27];
char temp = 'A';

for(int i=1; i<charArray.length; i++){//避免麻烦从1开始
charArray[i] = temp;
temp ++;
}

int[] intArray = {1, 17, 27, 127, 2397};

for(int i=0; i<intArray.length; i++){
if(intArray[i] < 26)
System.out.println(charArray[intArray[i]]);
else{
int first = intArray[i]/26;
int second = intArray[i]%26;

while(first > 26){
first = first/26;
second = first%26;
System.out.print(charArray[first]);
}
System.out.print(charArray[first]);
System.out.print(charArray[second] +"\n");
}
}
}
}

输出:
A
Q
AA
DW
CCC
littlemonster 2009-09-29
  • 打赏
  • 举报
回复
Hash里放 1<->A
2<->B
.....

a%26 取余数。然后去hash里取

我只先想到这个了。。



[Quote=引用楼主 zoutuo 的回复:]
一个方法,传一个int类型参数,返回一英文字母

例如:1对应A,2对应B...26对应Z

别告诉我要写26个if……有没有好的方法?而且这只是目前状态,以后可能有AA,AB,AC...AX(就是Excel中的头)
我要做的就是将数字转换为字母,各位大侠帮帮忙,谢谢!!
[/Quote]
zhuzeitou 2009-09-29
  • 打赏
  • 举报
回复
public int S2I(String s) {
int length = s.length();
int result = 0;
for (int i = 0; i < length; i++) {
char c = s.charAt(i);
if (Character.isUpperCase(c)) {
result += (int)(c - 'A' + 1) * (int)Math.pow(26, length - i - 1);
continue;
}
return 0;
}
return result;
}

public String I2S(int i) {
if (i < 1)
return "";
int temp = i;
StringBuffer sb = new StringBuffer();
while (temp != 0) {
int reminder = temp % 26;
if (reminder == 0) {
reminder = 26;
temp--;
}
sb.append((char)(reminder + 'A' - 1));
temp /= 26;
}
return sb.reverse().toString();
}


hmmm,一组互转的函数
py330316117 2009-09-29
  • 打赏
  • 举报
回复
int x=System.out.in(); char y=(char)x; System.out.println(y);
先输入个整数 再把它转换成 ASCII中的char类型呗 不过1好像不是对应 a 50是对应a
yuxinglian 2009-09-29
  • 打赏
  • 举报
回复
将字母转成对应的数字,再减去那个数字+1,
比如,A=96-95=1
B=97-95=2
瞎写的,别在意
bigbug9002 2009-09-29
  • 打赏
  • 举报
回复
以前写过一个:

public class Test7{


public static void main(String[] args)throws Exception{
for(int i=1;i<40;i++){
System.out.print(toLetterString(i)+",");
}
}
public static String toLetterString(int x){
if(x<1){
//出错了.
return null;
}
if(x<27){
return String.valueOf((char)('A'+x-1));
}
if(x%26==0){
return toLetterString(x/26-1)+"Z";
}
return toLetterString(x/26)+String.valueOf((char)('A'+x%26-1));
}

}

结果:
F:\java>java Test7
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,
hkllzh 2009-09-29
  • 打赏
  • 举报
回复
1楼的问题楼主怎么说
renrjs 2009-09-29
  • 打赏
  • 举报
回复
路过,拿分!
justinavril 2009-09-29
  • 打赏
  • 举报
回复
那AA对应什么数字啊?27?

其实就是一个26进制问题

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧