Java以递归方式删除格式中的内容

Ma *_*Tâm 2 java arrays string recursion

我使用递归来删除文本中不必要的字符.

EX:source ="这是demo java remove string"

regex ="这,是,java"

result ="demo remove string"

当程序停止递归函数时,我很难不提供条件.如果有任何方法可以更有效地使用递归工作,请告诉我

public class NewClass2 {

    static String regexs[] = {"This","is", "java"};

    private static String getRecursive(String source, int level) {

        String content = "";

        if (level > regexs.length - 1) {
            return "";
        }

        level++;

        for (String regex : regexs) {
            content = source.replaceAll(regex, "");

            if (!content.equals("")) {
                content = getRecursive(content, level);
            }
        }
        return content;
    }

    public static void main(String[] args) {
        String result = getRecursive("This is demo java remove string", 0);
        System.out.println(result);
    }
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

你的递归方法......都错了.

  • 你不应该在那里使用循环.
  • 什么时候level > regexs.length - 1,你应该回来source,而不是""

清理的方法变得简单得多:

private static String getRecursive(String source, int level) {
    if (level >= regexs.length) {
        return source;
    }
    return getRecursive(source.replaceAll(regexs[level], ""), level + 1);
}
Run Code Online (Sandbox Code Playgroud)

但是,这仍然不能完全满足您的要求.它提供了"demo remove string"而不是"demo remove string",因为其中的值regexs不包含空格,因此不会删除单词之间的空格.要解决这个问题,您可以附加"\\s*"到模式,例如:

    return getRecursive(source.replaceAll(regexs[level] + "\\s*", ""), level + 1);
Run Code Online (Sandbox Code Playgroud)