Для 1), вот очень простой способ регулярного выражения:
String in = "helllo goodbye";
String out = in.replaceAll("(.)(?=\\1)", "$1*");
System.out.println(out);
Отпечатки:
hel*l*lo go*odbye
Объяснение:
(.) //match any one character into group 1
(?=\\1) //positive lookahead for that same character by backreferencing group 1
$1* //replace that one character with the character followed by *
Я мог бы взять трещинуна 2) позже, но мне не нравятся несколько вопросов, заключенных в один.
Редактировать
Хорошо, так как я в настроении регулярного выражения, вот 2):
String in = "xhixhix";
String out = in;
while (!out.matches("[^x]*x*")) {
out = out.replaceAll("x(.*)", "$1x");
}
System.out.println(out);
Это заменяет x(something)
на (something)x
, пока все x
не будут в конце строки.Я уверен, что есть лучший способ сделать это с / чем регулярное выражение.