Java 练习:使用字符数组从字符串中删除字母,仅删除 1 个字符

问题描述 投票:0回答:1

我们正在课堂上练习递归,其中一个练习给我带来了麻烦(不允许使用循环)。我应该编写一个方法,该方法接受一个字符串和一个字符数组,该方法返回字符串,并从中删除数组中的所有字符。

这就是我到目前为止所拥有的。我正在努力让它删除多个字符:例如,当我输入时

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);
    }
java recursion
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.