Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java编写静态递归方法?_Java_String_Recursion_Methods_Static - Fatal编程技术网

如何用Java编写静态递归方法?

如何用Java编写静态递归方法?,java,string,recursion,methods,static,Java,String,Recursion,Methods,Static,我想在Java中使用静态递归方法编写代码,清理字符串s,它接受一个字母字符串s并返回一个字符串,其中相同的相邻字母被该字母的单个匹配项替换。该方法区分大小写 例如: cleanString("sensssaatiionnaallll!") -> "sensational!" cleanString("PPProoggggraamm") -> "Program" cleanString("Lletterriiing") -&

我想在Java中使用静态递归方法编写代码,清理字符串s,它接受一个字母字符串s并返回一个字符串,其中相同的相邻字母被该字母的单个匹配项替换。该方法区分大小写

例如:

cleanString("sensssaatiionnaallll!") -> "sensational!"                             

cleanString("PPProoggggraamm") -> "Program"

cleanString("Lletterriiing") -> "Lletering"

为什么要为它创建静态方法

我的理解是,您希望从输入字符串中删除重复字符

您也可以在下面的代码中执行

StringBuilder sb = new StringBuilder();
str.chars().distinct().forEach(c -> sb.append((char) c));
如果您愿意,您可以将这两行的方法作为代码中的功能

希望这有帮助

试试这个:

public class Main {
    public static void main(String[] args) {
        System.out.println(cleanString("sensssaatiionnaallll!"));
    }
    static String cleanString(String input)
    {
        if(input.length()<1) //To stop infinite recursion
            return input;
        var first = input.charAt(0);
        var count = input.chars().takeWhile(x -> x == first).count();
        return first + cleanString(input.substring((int)count));
    }
}
首先,它检查字符串的长度是否小于1。如果是,则返回空字符串本身并停止递归

接下来获取字符串的第一个字符。e、 g PPProoggggraamm->P

在PPProoggggraamm的情况下,获取开头中与第一个字符3相等的字符数

再次调用该函数,但这次从上述步骤中删除前n个字符,并在第一个字符前加上前缀。”P'+CleanStringRooggraamm


它只生成一个新字符串并排除重复字符

静态字符串输入{ ifinput==null返回null; char lastChar=0; StringBuilder输出=新StringBuilderinput.length; 对于int i=0,n=input.length;i=input.length返回; StringBuilder输出=新StringBuilder; char current=input.charAtindex; int nextIndex=指数+1; ifnextIndex>=input.length{ 返回output.appendcurrent.toString; } char next=input.CHARATNEXIDEX; 如果当前!=下一个{ 输出电流; } output.appendcleanStringinput,nextIndex; 返回output.toString; } }
从输入字符串中删除相邻字符的最短递归代码

public class StackOverflow { 

static String cleanString(String input) {
    return input==null || input.length()<=1?input:cleanStringWrapper(input.substring(1),input.substring(0,1));
}

static String cleanStringWrapper(String input, String result) {
  if (input.length() - 1 <= 0) {
    return result+(result.charAt(result.length() - 1)!=input.charAt(0)?input:"");
} else {
    return cleanStringWrapper(input.substring(1), result+(result.charAt(result.length() - 1) != input.charAt(0)?input.charAt(0):""));
}
} 

 public static void main(String[] args) 
 {
     System.out.println(cleanString("OOPS"));
     } 
 }
输出:

CleanStringSenssatiionNaallll!->耸人听闻

cleanStringPPProoggggraamm->Program

清洁钢带衬里->衬里

清洁眼罩->护目镜

清洁字符串ABC->ABC

清洁A->A

清除字符串->


cleanStringnull->null

到目前为止您做了什么?这将有助于我们评论您可以对代码进行哪些改进以实现您的结果您是如何决定使用递归函数来解决此问题的?这是你的家庭作业吗?你是说void cleanstrings还是String cleanstrings?以及你将如何清除goooogle?他希望减少重复字符的运行,而不仅仅是不同的字符。你非常敏锐!这段代码可以作为main方法内部的函数调用吗?这不是递归的对不起,我有一个错误,我没有注意到它需要一个递归方法。我在答案中添加了一个递归方法。您好,请问您在哪里实现这段代码?如何将其放入主函数?您好,我已经与主类共享了更新的代码。请检查一下。如果您发现一些进一步的困难,那么我们可以讨论。好的,它正在工作!感谢您的努力: