所以,我需要做的是将一个字符数组转换为一个数组数组。
我知道这听起来像是一个奇怪的请求,但这就是我一直想做的事情:
有这样的数组:
charArray[0] = e;
charArray[1] = b;
charArray[2] = p;
并将其翻译成:
numArray[0] = 5;
numArray[1] = 2;
numArray[2] = 16;
所以它会将char转换成字母表中的位置(例如“a”是第一个字母,“b”是第2个字母等)
这样做的最佳方法是什么?我打算一个接一个地尝试,但后来意识到我会有太多的代码行,它只是大量嵌套的if语句,而且我认为可能有更好的方法来做它。
(我的方式是if charArray[0] = a then numArray[0] = 1
,然后遍历每一个字母,直到你到达if charArray[0] = z then numArray[0] = 26
,但这需要在char数组中有26个不同的if语句PER CHAR,在我看来,这可能是一种可怕的方式,因为我的char数组非常长。)
答案 0 :(得分: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 :(得分:1)
你可以简单地说:
numArray[i] = charArray[i] - 'a' + 1;
<强>解释强>
查看 ascci table ,您会看到每个 char 的小数值。
a
的十进制值为97.所以你从中删除97并添加1.你得到1.
b
... z
的相同内容,从98(a
)删除97(b
)将为1,并且您添加1以获得2。等等..
答案 2 :(得分:0)
假设所有字符都是小写的,您可以写:
numArray[0] = (charArray[0] - 'a' + 1);
如果您使用小写和大写,则可以使用if语句,如:
if (charArray[0] >= 'A' && charArray[0] <= 'Z') {
numArray[0] = (charArray[0] - 'A' + 1);
} else {
numArray[0] = (charArray[0] - 'a' + 1);
}