2013-05-05 125 views
1

所以,我需要做的是将一个字符数组转换为数字数组。将字符数组转换为Java数组数组

我知道这听起来像一个奇怪的要求,但这里是我一直在努力做的事情:

有一个数组是这样的:

charArray[0] = e; 
charArray[1] = b; 
charArray[2] = p; 

,并将它translatated到:

numArray[0] = 5; 
numArray[1] = 2; 
numArray[2] = 16; 

所以到它在字母表中的位置,将翻译的字符(如“a”是第一个字母“b”是第二等)

这样做的最好方法是什么?我试图一个接一个地做,但后来我意识到我会有太多的代码行,它只是嵌套if语句,我认为可能有更好的方法来做到这一点。 (我的方法是if charArray[0] = a then numArray[0] = 1,并经过这样的每一个字母,直到你到达if charArray[0] = z then numArray[0] = 26,但是这将需要26个不同的if语句在char数组中,这将是一个可怕的方式。这样做在我看来,因为我的字符数组极长)

回答

7

您可以使用一个技巧对于每个索引i

numArray[i] = charArray[i] - 'a' + 1; 

“经书”做这件事的方式更是:

final String letters = "abcdefghijklmnopqrstuvwxyz"; 
. . . 
numArray[i] = letters.indexOf(charArray[i]) + 1; 

那么任何位置i这样charAray[i]不是小写字母将在numArray[i]最终成为0。用诀窍,numArray[i]的价值将是不可预知的。

1

你可以简单:

numArray[i] = charArray[i] - 'a' + 1;

说明:

看着ascci table你会看到每个char十进制值

a十进制值的97所以,如果你删除它97再加1你得到1

同为b ... z,删除97(a)从98(b )将于1,你加1得到2 ..等..

0

假定所有字符都是小写的,你可以写:

numArray[0] = (charArray[0] - 'a' + 1); 

如果你有小写和大写,你可以,如果使用的语句,如:

if (charArray[0] >= 'A' && charArray[0] <= 'Z') { 
    numArray[0] = (charArray[0] - 'A' + 1); 
} else { 
    numArray[0] = (charArray[0] - 'a' + 1); 
} 
相关问题