Ниже приведен мой код Java для удаления всех совпадающих пар соседних букв, но у меня возникают некоторые проблемы с классом Java Matcher.
Мой подход
Я пытаюсь найти все последовательные повторяющиеся символы на входе, например
aaa, bb, ccc, ddd
Затем замените совпадение нечетной длины на последний сопоставленный шаблон, а совпадение четной длины - на ""
, т.е.
aaa -> a
bb -> ""
ccc -> c
ddd -> d
s has single occurrence, so it's not matched by the regex pattern and excluded from the substitution
Я звоню Matcher.appendReplacement
, чтобы сделать условную замену шаблонов, сопоставленных на входе, на основе длины группы (четной или нечетной).
Код:
public static void main(String[] args) {
String s = "aaabbcccddds";
int i=0;
StringBuffer output = new StringBuffer();
Pattern repeatedChars = Pattern.compile("([a-z])\\1+");
Matcher m = repeatedChars.matcher(s);
while(m.find()) {
if(m.group(i).length()%2==0)
m.appendReplacement(output, "");
else
m.appendReplacement(output, "$1");
i++;
}
m.appendTail(output);
System.out.println(output);
}
Ввод: aaabbcccddds
Фактический вывод: aaabbcccds
(только замена ddd
на d
, но пропуск aaa
, bb
и ccc
)
ОжидаетсяВыход: acds