我们正在课堂上练习递归,其中一个练习给我带来了麻烦(不允许使用循环)。我应该编写一个方法,该方法接受一个字符串和一个字符数组,该方法返回字符串,并从中删除数组中的所有字符。
这就是我到目前为止所拥有的。我正在努力让它删除多个字符:例如,当我输入时
char[] remLetArray = {'a', 's'};
System.out.println(removeLetters("asdfghsassaaaae", remLetArray));
它返回“sdfghssse”。完整内容如下:
// helper method
public static String removeLetters(String str, char[] ch, int pointer) {
if (pointer != ch[ch.length - 1]) {
if (str.length() == 0) {
return removeLetters(str, ch, pointer + 1);
}
if (str.charAt(0) == ch[pointer]) {
return removeLetters(str.substring(1), ch);
} else {
return str.charAt(0) + removeLetters(str.substring(1), ch);
}
} else {
System.out.println(str);
if (str.length() == 0) {
return "";
}
if (str.charAt(0) == ch[pointer]) {
return removeLetters(str.substring(1), ch);
} else {
return str.charAt(0) + removeLetters(str.substring(1), ch);
}
}
}
// actual method
public static String removeLetters(String str, char[] ch) {
return removeLetters(str, ch, 0);
}
您在执行任务上投入了太多精力。在您的 removeLetter()
递归方法中使用
String#replace()方法。
首次调用
pointer
递归方法时,从 0
处开始 removeLetter()
值。在 removeLetter()
方法中删除(指针)索引 0 处的字符,然后使用 if
语句检查我们是否位于 char
数组的末尾。如果不是,则在 if
块内将指针增加 1,并再次调用 removeLetter()
方法,传递修改后的字符串(到目前为止)和新的指针(索引)值。 removeLetter()
方法应始终返回修改后的输入字符串。这是一个例子:
public static String removeLetters(final String inputString, final char[] removeArray, final int pointer) {
int idx = pointer;
String newString = inputString.replace(Character.toString(removeArray[idx]), "");
if (idx < removeArray.length - 1) {
idx++;
newString = removeLetters(newString, removeArray, idx);
}
return newString;
}
char[] remLetArray = {'a', 's'};
System.out.println(removeLetters("asdfaghsassaaaae", remLetArray, 0));
dfghe