此方法所属的程序使用简单密码对消息进行编码和解码(即' ABCD' 1,2,3,4'或' 1,2 ,3,4' ABCD')。编码消息包含的数字是冒号分隔的。字符串中的每个值都应该转换为整数,然后转换为字符,最后连接成结果字符串。这个方法应该递归地解码消息,但这是我第一次搞乱递归,所以它还没有起作用。这是我收到的错误
"线程中的异常" AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1"。
方法:
public static String DecodeR(String msg, String result) {
if (msg.length()>0) {
int pos =1;
pos += msg.indexOf(",");
int x = Integer.parseInt(msg.substring(0,msg.indexOf(",")));
if (x==0) {
x=32;
return DecodeR ((msg.substring(msg.indexOf(pos))),result+=String.valueOf((char)x));
} else if (x==99) {
x=63;
return DecodeR ((msg.substring(msg.indexOf(pos))),result+=String.valueOf((char)x));
} else {
x=x+64;
return DecodeR ((msg.substring(msg.indexOf(pos))),result+=String.valueOf((char)x));
}
} else {
return result;
}
}//end of DecodeR
编辑:我未能正确设置导致递归继续的基本情况,直到导致负索引位置。此外,我对substring和indexOf的理解不足,导致首先出现错误的字符串解析。完成的代码:
public static String DecodeR(String msg, String result) {
if (msg.length() == 0) {
return result;
}
int commaPosition = msg.contains(",") ? msg.indexOf(",") : msg.length();
int charCode = Integer.parseInt(msg.substring(0, commaPosition));
String remainingString = msg.contains(",") ? msg.substring(commaPosition+1, msg.length()) : "";
if (charCode == 0) {
charCode = 32;
} else if (charCode == 99) {
charCode = 63;
} else {
charCode += 64;
}
result += String.valueOf((char)charCode);
return DecodeR(remainingString, result);
}//end of DecodeR
感谢您的帮助,非常感谢您的建议。
答案 0 :(得分:0)
有一种更简单的解码方法:
例如a = 1和z = 26,并且中间的所有字母都是它们各自的数字,你所要做的就是找每个说24并用x替换它。这可以通过使用字符串替换方法来完成,而不是必须按最大数字到最小数字的顺序替换。
EG。
String decoded = encoded.replace("26", "z").replace("25", "y")........replace("1", "a").replace(",", "");
这将允许您为每个字符分配数字,并且还可以删除冒号,而无需使用之前使用的巨大方法来替换它们。