java - string - 如何在Java中编写静态递归方法?

85 0

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

例如:


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



cleanString("PPProoggggraamm") ->"Program"



cleanString("Lletterriiing") ->"Lletering"



时间: 原作者:

77 5

尝试这个:


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. 如果是,则返回字符串本身( 是空的) 并停止递归。

  • 下一步获取字符串的第一个字符。 ( 比如 PPProoggggraamm -> P )

  • 获取起始字符的起始字符数( 在 PPProoggggraamm的情况下为3 )

  • 再次调用函数,但这次lopping从上一步中的第一个字符中删除,并预先预先显示第一个字符。 ( 'P'+ cleanString("rooggggraamm") )

115 4

从输入字符串中删除相邻字符的最短递归代码。


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"));


 } 


 }



输出:

cleanString ("sensssaatiionnaallll") ->" !

cleanString ("ppprooggggraamm") ->"程序"

cleanString ("lletterriiing") ->"lletering"

cleanString ("gooooogle") ->"gogle"

cleanString ("abc") ->"abc""

cleanString ("") ->""

cleanString (""->""

cleanString ( 空 )> 空

67 5

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


static String cleanString(String input) {


 if(input == null) return null;



 char lastChar = 0;


 StringBuilder output = new StringBuilder(input.length());


 for (int i=0,n=input.length(); i<n; i++) {


 char c = input.charAt(i);


 if(c!= lastChar) {


 lastChar = c;


 output.append(c);


 }


 }



 return output.toString();


}



递归方法:


public class Example {


 public static int main(String[] args) {


 String input ="sensssaatiionnaallll";


 String output = cleanString(input, 0);


 System.out.println(output);//print: sensational


 return 0;


 }



 private static String cleanString(String input, int index) {


 if(input == null) return"";


 if(index> = input.length()) return"";



 StringBuilder output = new StringBuilder();



 char current = input.charAt(index);



 int nextIndex = index + 1;


 if(nextIndex> = input.length()) {


 return output.append(current).toString();


 }



 char next = input.charAt(nextIndex);



 if (current!= next) {


 output.append(current);


 }



 output.append(cleanString(input, nextIndex));



 return output.toString();


 }


}



68 3

为什么要为此制作静态方法?

我明白你想要从输入字符串中删除重复的字符。

你也可以在代码下面做。


StringBuilder sb = new StringBuilder();


str.chars().distinct().forEach(c -> sb.append((char) c));



如果您愿意,可以将这两行的方法作为代码中的一项功能。

希望有帮助!

...