java如何实现某一字符连续出现三次以上只保留三次?

举个例子,假设特定字符是2和5。
原字符串12222234555556666666。
最终处理完以后得到为1222345556666666。
解释:其中2和5是特定字符,重复了3次以上需要只保留3次;但是6不是特定字符,所以重复多少次都可以。
最好能用正则实现,这样代码能简洁一些。如果用循环的话,希望能有一个时间复杂度低的方法。

1、根据题意需要有两个步骤,第一识别第二替换,使用现成方法即可
2、示例如下,指定数字即代码中的2|5可根据需要自行替换
String s ="1222223455555555555555556666666";
System.out.println(s.replaceAll("([2|5])\\1{1,}", "$1$1$1"));追问

如果是2和5混合出现连续3次以上只保留前三个呢?
比如,252525,替换后为252

追答

1、抱歉刚看到,这个道理其实是一样的,替换目标字符与次数限制就行。

2、示例

String s ="252525";
//--匹配25输出后拼接目标字符首位,因连续出现所有保留字符第三位定是目标字符首位
System.out.println(s.replaceAll("(25){3}", "$1").concat("2"));

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-13
用正则表达式的话就需要找出匹配三次以上2和5的group组,将其替换为三次,匹配可以[2]{3}取,但是限制是仅限连续数字。
第2个回答  2021-04-13
你能想到的算法时间复杂度是多少
相似回答