Java 8 计算字符串java 8中连续出现的字符数
我正在尝试使用Java8编写一个方法,该方法接受两个参数,一个字符串和一个整数。该方法将返回另一个与输入字符串类似的字符串,但删除了某些字符 它将从相同字符的连续运行中删除字符,其中运行的长度大于输入参数 我可以使用简单的Java for循环来实现这一点,但我正在寻找使用Java 8功能的解决方案,可能是lambda表达式。例如,如果方法的输入是aaab,那么它应该返回aab,如果是aabb,那么它应该返回ab 下面是使用for循环的代码Java 8 计算字符串java 8中连续出现的字符数,java-8,Java 8,我正在尝试使用Java8编写一个方法,该方法接受两个参数,一个字符串和一个整数。该方法将返回另一个与输入字符串类似的字符串,但删除了某些字符 它将从相同字符的连续运行中删除字符,其中运行的长度大于输入参数 我可以使用简单的Java for循环来实现这一点,但我正在寻找使用Java 8功能的解决方案,可能是lambda表达式。例如,如果方法的输入是aaab,那么它应该返回aab,如果是aabb,那么它应该返回ab 下面是使用for循环的代码 public String eliminate
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中新的特性来做同样的事情。实际上,我需要处理很多元素,我简化了解决方案并发布在这里。是的,它可以通过流来完成。这很复杂,我不想费心去做。结果代码无论如何都不是好代码。