java变换值char二维数组(字母)变成整数(数字)

时间:2014-03-17 15:40:38

标签: java multidimensional-array char

我很困惑如何将2D char数组中的值转换为数字(整数)。

我们假设数组是:[[a, b],[c, d],[e, f]]{{'a','b'},{'c','d'},{'e','f'}}

该数组中的所有值都将转换为数字,a = 0,b = 1,c = 2,d = 3,e = 4,f = 5.

我希望结果如:[[0, 1], [2, 3], [4, 5]]{{0, 1},{2, 3},{4, 5}}

如果它只是一串“abcdef”,我可以使用charAt(),但我可以'在数组中使用它,尤其是在char数组中。所以,我使用.replace。

package array_learning;

public class test {     
    public static void main(String[] args){
        char [][] word= {{'a','b'},{'c','d'},{'e','f'}};  
        int strLength = word.length; 
        for(int i = 0; i<strLength; i++){
            for(int j=0; j<2; j++){
                String strWord = Character.toString(word[i][j]);
                strWord = strWord.replace("a","0");
                strWord = strWord.replace("b","1");
                strWord = strWord.replace("c","2");
                strWord = strWord.replace("d","3");
                strWord = strWord.replace("e","4");
                strWord = strWord.replace("f","5"); 
                System.out.print(strWord+" ");
            } 
            System.out.println();
        }     

    }
}

但是,结果并不是我所期望的。

结果:

0 1 

2 3 

4 5 

如何以正确的方式解决这个问题?

3 个答案:

答案 0 :(得分:1)

考虑:

import java.util.Arrays;   

public class Ctest {
    public static void main(String[] args) {
        char[][] word= { {'a', 'b'}, {'c', 'd'}, {'e', 'f'} };

        println(word); // format with brackets e.g., [[a, b], [c, d]]
        System.out.println(Arrays.deepToString(word)); // same format

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

        println(word); // formatted with brackets
        printPlain(word); // formatted without brackets
    }

    public static void println(char[][] word) {
        System.out.print("[");
        for (int i = 0; i < word.length; i++) {
            if (i > 0) System.out.print(", ");
            System.out.print("[");
            for (int j = 0; j < word[i].length; j++) {
                if (j > 0) System.out.print(", ");
                System.out.print(word[i][j]);
            }
            System.out.print("]");
        }
        System.out.println("]");
    }

    public static void printPlain(char[][] word) {
        for (int i = 0; i < word.length; i++) {
            if (i > 0) System.out.print(", ");
            for (int j = 0; j < word[i].length; j++) {
                if (j > 0) System.out.print(", ");
                System.out.print(word[i][j]);
            }
        }
        System.out.println();
    }
}

我所做的主要更改是数组中的值实际转换(我不确定你是否想要这个;你之前没有将任何新值存储回数组中),数据处理为char而不转换为String,转换是通过计算而不是每个值的特殊情况完成的,转换数据并打印它们已经相互分离。< / p>

还有一些小的变化。数据现在以您演示的格式打印,带括号,不假设内部数组总是只有两个元素,并且类名已更改为以大写字母开头。

另一个小调。在将值从小写字母转换为数字的行上,表达式位于括号中并被转换回char。这是因为当您添加和减去chars时,Java会执行向int的扩展转换,因此要将值存储回char[][],必须将其转换为char试。

我忘记了java.util.Arrays类中已有一个Java方法来格式化带括号的多维数组:Arrays.deepToString(word)将为您提供与上面println方法相同的格式。我还展示了一个类似的printPlain方法,但如果您更喜欢更清晰的输出格式,则缺少方括号。您也可以轻松修改此方法,使其附加到StringBuilder并返回String,而不是直接打印数组。

答案 1 :(得分:0)

一切都正确匹配。这是一个二维数组,因此您的数组将逐个打印。

如果您不希望它们单独行,那么在for循环结束时删除System.out.println();语句。

答案 2 :(得分:0)

首先使用Arrays.toString()将数组转换为字符串。然后做替换。例如:

char [][] word= {{'a','b'},{'c','d'},{'e','f'}};  
String strWord = "";
for(char []w : word){
    // convert array int [x, y] format
    strWord += Arrays.toString(w)+",";
}
// removing comma(,) from end.
strWord = strWord.replaceAll(",$", "");

// do your replacement.
strWord = strWord.replace("a","0");
// ... more

// output
System.out.println("["+strWord+"]");