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

问题描述 投票:-2回答:4

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

例如:

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

cleanString("PPProoggggraamm") -> "Program"

cleanString("Lletterriiing") -> "Lletering"
java string recursion methods static
4个回答
1
投票

试试这个:

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)
  • 再次调用该函数,但这次从上一步中删除前n个字符,并在前面加上第一个字符。 ('P' + cleanString("rooggggraamm")

0
投票

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

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(“Google”) - >“Google”

cleanString(“ABC”) - >“ABC”

cleanString(“A”) - >“A”

cleanString(“”) - >“”

cleanString(null) - > null


0
投票

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

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

-2
投票

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

我的理解是你想要从输入字符串中删除重复的字符。

您也可以在代码下面执行此操作。

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

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

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.