Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-删除一行中每四次出现的字符_Java_Regex_String - Fatal编程技术网

Java-删除一行中每四次出现的字符

Java-删除一行中每四次出现的字符,java,regex,string,Java,Regex,String,我正在寻找一种方法来删除一行中每四次出现的字符(a-zA-Z) 例如,如果我有以下字符串: hellooo我现在非常忙,因为我工作非常努力 我想删除所有第四、第五、第六。。。一行中的字符。但是,在单词hard中,出现了第四个r,我不想删除它,因为它不是一行中的第四个r,它被其他字符包围。结果应该是: 你好,我现在很忙,因为我工作很努力 我已经找到了这样做的方法,我本可以找到替换/删除字符第四次出现的方法,但找不到替换/删除行中字符第四次出现的方法 提前谢谢。您需要的正则表达式是(()\2{2})

我正在寻找一种方法来删除一行中每四次出现的字符(a-zA-Z)

例如,如果我有以下字符串:
hellooo我现在非常忙,因为我工作非常努力

我想删除所有第四、第五、第六。。。一行中的字符。但是,在单词
hard
中,出现了第四个
r
,我不想删除它,因为它不是一行中的第四个
r
,它被其他字符包围。结果应该是:
你好,我现在很忙,因为我工作很努力

我已经找到了这样做的方法,我本可以找到替换/删除字符第四次出现的方法,但找不到替换/删除行中字符第四次出现的方法


提前谢谢。

您需要的正则表达式是
(()\2{2})\2*
。不太清楚Java ese中是什么,但它所做的是匹配任何单个字符,然后再匹配该字符的两个附加实例,然后再匹配任意数量的附加实例。然后将其替换为第一个捕获组(
\1
)的内容,就可以开始了。

在Java中,您可以根据反向引用使用此替换:

str = str.replaceAll("(([a-zA-Z])\\2\\2)\\2+", "$1");


函数可以这样编写:

公共静态字符串转换(字符串输入){
if(input.isEmpty()){
返回输入;
}否则{
最终StringBuilder sb=新StringBuilder();
char lastChar='\0';
重复整数=0;
对于(int i=0;i

我认为它比正则表达式快。

你想要正则表达式的答案吗?或者助手函数可以工作吗?我认为函数也可以工作。只要它高效、快速并且不消耗太多资源,我就必须使用
“aaaa”。replaceAll(()\\1{2})\\1*,“)
,它将给出结果
“aaa”
?不完全正确。我不了解Java的正则表达式机制,但您需要第二个捕获组(外括号)的内容作为
replaceAll
的第二个参数。我相信您的捕获组编号顺序相反。