我试图通过从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)
答案 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]);