Чрезвычайно простое решение, использующее \G
:
word = java.util.regex.Pattern.quote(word);
return str.replaceAll("\\G((?:" + word + ")*+).", "$1+");
Однако есть оговорка .Вызов plusOut("12xxxxx34", "xxx")
с вышеприведенной реализацией вернет ++xxx++++
.
В любом случае, проблема не ясна с поведением в таком случае для начала.Для такой ситуации даже нет тестового примера (поскольку моя программа прошла все тестовые случаи).
Регулярное выражение в основном совпадает с решением для циклического анализа (которое также проходит все тестовые случаи):
StringBuilder out = new StringBuilder(str);
for (int i = 0; i < out.length(); ) {
if (!str.startsWith(word, i))
out.setCharAt(i++, '+');
else
i += word.length();
}
return out.toString();
Неоднократно пропускает word
, затем заменяет текущий символ, если он не является префиксом word
.