4 回答
TA贡献2016条经验 获得超9个赞
试试这个:
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)获取开头等于第一个字符的字符数(在以下情况下为 3)
PPProoggggraamm)再次调用该函数,但这次从上述步骤中剔除前 n 个字符,并在第一个字符之前添加。(
'P' + cleanString("rooggggraamm"))
TA贡献1811条经验 获得超4个赞
它只是生成一个新的字符串并排除重复字符。
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();
}
}
TA贡献1735条经验 获得超5个赞
用于从输入字符串中删除相邻字符的最短递归代码。
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"));
}
}
输出:
干净弦(“感官”)->“耸人听闻!
清洁字符串(“PPProoggggraamm”) -> “程序”
干净弦(“莱特里林”) -> “莱特林”
干净弦(“咕噜咕噜”) ->“咕噜”
干净弦(“ABC”) -> “ABC”
干净字符串(“A”) -> “A”
干净字符串(“”) -> “”
干净字符串(空) -> 空
TA贡献1836条经验 获得超3个赞
为什么要为此制作静态方法?
据我所知,您要从输入字符串中删除重复的字符。
您也可以在代码下进行操作。
StringBuilder sb = new StringBuilder(); str.chars().distinct().forEach(c -> sb.append((char) c));
如果你愿意,你可以把这两行的方法作为代码中的一个功能。
希望这有帮助!
添加回答
举报
