Polybius方阵解密含空格密文:解决Java数组越界问题
问题分析与修复
错误原因
你碰到的ArrayIndexOutOfBoundsException本质是解密代码没处理密文中的空格。加密时明文的空格被保留在密文里,但你的解密逻辑默认所有字符都是两位一组的数字坐标,当遍历到空格时:
Character.getNumericValue(' ')返回值是-2- 减1后得到负数索引,直接用这个索引访问5长度的数组,必然触发越界错误
修复后的解密代码
修改decipher方法,加入空格判断逻辑:遇到空格直接保留,其余字符按两位坐标解析:
public static String decipher(String ctext, char[][] matrix) { StringBuilder deciphered = new StringBuilder(); for (int i = 0; i < ctext.length(); ) { // 不固定步长,根据字符类型调整 char currentChar = ctext.charAt(i); // 处理空格:直接追加,步长加1 if (currentChar == ' ') { deciphered.append(' '); i++; } else { // 处理两位数字坐标:步长加2 int row = Character.getNumericValue(currentChar) - 1; int col = Character.getNumericValue(ctext.charAt(i + 1)) - 1; deciphered.append(matrix[row][col]); i += 2; } } return deciphered.toString(); }
额外提醒
- 确保密文中只有数字和空格,若存在其他非预期字符,可再加判断逻辑过滤或报错
- 原输入输出的读取代码无需改动,保持原样即可
内容的提问来源于stack exchange,提问作者clvn
相关产品推荐
相关产品推荐

