java字符在2D char数组中转换为数字

时间:2014-03-29 18:06:25

标签: java multidimensional-array

我正在尝试将2D char数组中的所有字母转换为数字。结果,我想要a = 0,b = 1,c = 2,... z = 25.

然后,我尝试将其作为我的代码的一部分:

char [][] letters = {{'i', 'u'}, {'a', 'g'}, {'e', 'k'}};

for (int i = 0; i < letters.length; i++) {
            for (int j = 0; j < letters[i].length; j++) {
                if (letters[i][j] >= 'a' && letters[i][j] <= 'z') {
                   letters[i][j] = (char) ((letters[i][j] - 'a') + '0');
                } 
            }
        }

我的代码的结果不是我之前的预期。

从'a'到'j',效果很好。但是,从'k'到'z',它没有打印预期的数字。

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

首先,您不能将数字10存储为单个字符。它是两个字符,1和0.因此结果数组必须是除char数组之外的其他字符。如果它是你工作的int那么你可能最好将它们存储在一个int数组中。

intarray[i][j] = (letters[i][j] - 'a');其中intarray是int数组的数组,其大小与char数组相同。如果必须将结果存储在同一个数组中并将其转换为数字然后转换为字符串,则其他选项是创建字符串数组。喜欢这个

String [][] letters = {{"i", "u"}, {"a", "g"}, {"e", "k"}};

for (int i = 0; i < letters.length; i++) {
    for (int j = 0; j < letters[i].length; j++) {
        if (letters[i][j].charAt(0) >= 'a' && letters[i][j].charAt(0) <= 'z') {
           letters[i][j] = Integer.toString((letters[i][j].charAt(0) - 'a');
        } 
    }
}

原因是ascii表只有数字0到9作为符号。因此,在您的情况下,您将获得前10个字母进行转换,但之后您将开始在ascii表中获取各种符号。例如,k将是:,l是; m是&lt;等等。当您将字符转换为数字时,您最好使用它们作为int,因为它们更容易进行数学运算。

你可以做同样的事情而不把它转换成int但这意味着你需要找出char - &#39; a&#39;如果是这样,你需要得到除以10的数字,然后得到数字的模数,并给它们每个关联的ascii符号,使它们成为一个字符串。这样做要复杂得多,也很难做到,特别是考虑到使用整数就这么容易。

还有其他2个选项,但我仍然认为上面的字符串选项是最简单的。

首先是将2d数组作为int。然后,您可以将整数初始化为字母。然后你可以对它们进行算术运算以找到它们适合的数字。像这样:

int [][] letters = {{'i', 'u'}, {'a', 'g'}, {'e', 'k'}};

for (int i = 0; i < letters.length; i++) {
   for (int j = 0; j < letters[i].length; j++) {
        if (letters[i][j] >= 'a' && letters[i][j] <= 'z') {
            letters[i][j] = (letters[i][j] - 'a');
        } 
    }
}

这会产生同样的效果。这样做的问题是打印实际的字母需要更多的努力,最后你需要将它转换为char。所以我不建议这样做。

第二个选项是将char值存储在char数组中。像这样:

char [][] letters = {{'i', 'u'}, {'a', 'g'}, {'e', 'k'}};

for (int i = 0; i < letters.length; i++) {
    for (int j = 0; j < letters[i].length; j++) {
        if (letters[i][j] >= 'a' && letters[i][j] <= 'z') {
            letters[i][j] = (char) (letters[i][j] - 'a');
        } 
    }
}

要打印它,那么您需要将char转换为int。所以你可以打印出来:

for (int i = 0; i < letters.length; i++) {
    for (int j = 0; j < letters[i].length; j++) {
        System.out.printf("%d\n", (int) letters[i][j]);
    }
}

这样就可以了,但是有点hacky,你需要确保你一直把你的char转换为int。到目前为止,我认为字符串数组是最好的选择,但它取决于你的目标是什么。但有一件事你不能做的就是存放字母&#39; 10&#39;在char数组中作为&#39; 10&#39;不是单个字符,而是2个字符,不适合字符。