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

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

希望有帮助!

...