Java正则表达式否定预测替换非三重字符

时间:2015-08-11 21:31:38

标签: java regex

我试图取一个数字,将其转换为字符串并替换所有非三元组的字符。

EG。如果我传入1222331,我的替换方法应该返回222。我可以发现这种模式存在但我需要获取值并将其保存到字符串中以获得其他逻辑。我不想做一个for循环迭代这个字符串。

我有以下代码:

String first = Integer.toString(num1);
String x = first.replaceAll("^((?!([0-9])\\3{2})).*$","");

但它也取代了三位数。我只需要它来替换其余的字符。我的做法错了吗?

1 个答案:

答案 0 :(得分:3)

您可以使用

first = first.replaceAll("((\\d)\\2{2})|\\d", "$1");

请参阅regex demo

正则表达式 - ((\d)\2{2})|\d - 匹配重复三次的数字(并将其捕获到组1中),或者匹配任何其他数字。 $1只需在结果字符串中恢复捕获的文本,同时删除所有其他文本。