将字符转换为数组索引

时间:2014-12-23 02:53:47

标签: java arrays type-conversion

我试图通过从String中读取数组索引来访问字符数组。

public class HelloWorld {

    public static void main(String[] args) {
        //             0123456789
        char[] code = {'A', 'B','C','D','E','F','G','H','I','J'};
        String orig = "0123456789";
        for ( int i=0; i <10; i++) {
            System.out.print(code[orig.charAt(i)]);
        }
    }

}

我希望ABCDEFGHIJ的输出,但我得到一个运行时错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 48
    at HelloWorld.main(HelloWorld.java:9)

4 个答案:

答案 0 :(得分:3)

这是因为orig.charAt(i)返回一个ascii字符。因此'0'实际上是数字48.您可以通过以下方式轻松解决此问题:

code[orig.charAt(i) - 48];

答案 1 :(得分:1)

当您使用orig.charAt(i)作为索引时,char值会转换为int。每个字符都有一个数值。例如,'0'为48.您可以减去遇到的最低字符值,以获得正确范围内的索引:

System.out.print(code[orig.charAt(i) - '0']);

答案 2 :(得分:1)

只需索引字符串的长度并获取该索引处的代码数组的字符... charAt将为您提供文字int值,这显然不是您想要的。

public static void main(String[] args) {
        //  0123456789
        char[] code = {'A', 'B','C','D','E','F','G','H','I','J'};
        String orig = "0123456789";
        for ( int i=0; i < orig.length(); i++) {
            System.out.print( code[i] );
        }
    }

答案 3 :(得分:1)

由于数组索引是int,它会自动转换为int 但是字符'0'的int值是48,因此消息“ArrayIndexOutOfBoundsException”。
下面的代码应该这样做

System.out.print(code[orig.charAt(i)-48]);