Java 8 计算字符串java 8中连续出现的字符数

Java 8 计算字符串java 8中连续出现的字符数,java-8,Java 8,我正在尝试使用Java8编写一个方法,该方法接受两个参数,一个字符串和一个整数。该方法将返回另一个与输入字符串类似的字符串,但删除了某些字符 它将从相同字符的连续运行中删除字符,其中运行的长度大于输入参数 我可以使用简单的Java for循环来实现这一点,但我正在寻找使用Java 8功能的解决方案,可能是lambda表达式。例如,如果方法的输入是aaab,那么它应该返回aab,如果是aabb,那么它应该返回ab 下面是使用for循环的代码 public String eliminate

我正在尝试使用Java8编写一个方法,该方法接受两个参数,一个字符串和一个整数。该方法将返回另一个与输入字符串类似的字符串,但删除了某些字符

它将从相同字符的连续运行中删除字符,其中运行的长度大于输入参数

我可以使用简单的Java for循环来实现这一点,但我正在寻找使用Java 8功能的解决方案,可能是lambda表达式。例如,如果方法的输入是aaab,那么它应该返回aab,如果是aabb,那么它应该返回ab

下面是使用for循环的代码

     public String eliminate(String S, int allowed) {
         int count = 1;
         StringBuilder sb = new StringBuilder();

         try {
             sb.append(S.charAt(0));
             for (int i = 1; i < S.length(); i++) {
                 if (S.charAt(i) == S.charAt(i - 1)) {
                     if (count < allowed) {
                         sb.append(S.charAt(i));
                         count = count + 1;
                     }
                 } else {
                     sb.append(S.charAt(i));
                     count = 1;
                 }
             }

         } catch (StringIndexOutOfBoundsException e) {
             e.printStackTrace();
         }
         return sb.toString();
     }

您想使用Java8特性有什么原因吗?我认为流不会很优雅,因为流一次只看一个元素。为了记住前面的内容,你基本上也必须做你现在正在做的事情。其他新功能似乎也不是特别有用

相反,我认为,一个简单的旧正则表达式正是您所需要的:

private static String eliminate(String input, int limit)
{
    return input == null ? null : input.replaceAll("(.)(\\1{" + (limit - 1) + "})\\1*", "$1$2");
}
此方法将每个重复字符序列缩短到指定的长度。替换的工作原理如下:

查找具有 . 一个字符使用其他字符而不是“.”,例如\w用于特定字符 \\1{+limit-1+}后跟同一字符的limit-1 \\1*后跟相同字符的任意数字 并将其替换为 $1第一部分第一个字符和 $2第二部分限制-1个字符
欢迎来到stackoverflow。请提供您的具体问题代码。这将有助于其他成员更好地理解您的问题,同时,您将为他们提供您问题的背景。请检查这些链接:流并不是这项工作的最佳工具。当您可以以相同的方式独立处理许多元素(如集合的成员)时,流是非常棒的。理想情况下,每种处理方法都应该没有副作用。当需要从连续的元素中组合信息,这是对相同字符的运行计数所必需的,考虑使用循环而不是流。我能够使用简单的for循环来实现这一点,但是我可以用lambda表达式或java 8中新的特性来做同样的事情。实际上,我需要处理很多元素,我简化了解决方案并发布在这里。是的,它可以通过流来完成。这很复杂,我不想费心去做。结果代码无论如何都不是好代码。