Java 递归操作字符串
此方法所属的程序使用简单密码(即“ABCD”到“1,2,3,4”或“1,2,3,4”到“ABCD”)对消息进行编码和解码。编码消息由冒号分隔的数字组成。字符串中的每个值都应该转换为int,然后转换为chars,最后连接为结果字符串。这个方法应该递归地解码消息,但这是我第一次使用递归,所以它还不起作用。这就是我一直收到的错误 线程“AWT-EventQueue-0”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:-1” 方法:Java 递归操作字符串,java,string,recursion,substring,indexof,Java,String,Recursion,Substring,Indexof,此方法所属的程序使用简单密码(即“ABCD”到“1,2,3,4”或“1,2,3,4”到“ABCD”)对消息进行编码和解码。编码消息由冒号分隔的数字组成。字符串中的每个值都应该转换为int,然后转换为chars,最后连接为结果字符串。这个方法应该递归地解码消息,但这是我第一次使用递归,所以它还不起作用。这就是我一直收到的错误 线程“AWT-EventQueue-0”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:-1” 方法: pub
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
感谢您的帮助,我们非常感谢您的建议。有一种更简单的方法来解码: 比如说a=1和z=26,中间的所有字母都是它们各自的数字,你所要做的就是找到每个字母24,并用x替换。这可以通过使用字符串替换方法来完成,而不是必须按照从最大数到最小数的顺序进行替换 例如。
String decoded=encoded.replace(“26”,“z”)。replace(“25”,“y”)……replace(“1”,“a”)。replace(“1”,“a”)代码>
这将允许您为每个字符分配数字,并删除冒号,而无需使用之前用来替换冒号的庞大方法。递归解码消息的确切含义是什么?我很难弄清楚你的代码打算做什么。给我们一个将递归几次的输入,以及递归的每个阶段的输出,或者如果阶段太多,则是几个重要阶段的输出。您使用的indexOf
方式错误。它需要一个字符串或字符,并将在字符串中找到该字符的位置。你交出某种职位。此位置值用作字符,并导致msg.indexOf
返回-1
,因为在字符串中找不到该字符。如果可以使用Java 8,请使用集合和映射/筛选方法以及lambdas。某些方法正在尝试获取不存在的字符串元素的值