Вы можете использовать замену группы захвата, если ~~
идут строго парами.
private final static Pattern pattern = Pattern.compile("(?:~~([^~]+~~))");
public static String replaceOddTildes(String value) {
return pattern.matcher(test).replaceAll("**$1");
}
И:
String result = replaceOddTildes("~~40~~ Celsius Temp: 33 Celsius Temp:~~50~~"));
Обратите внимание, что будет пропущено последнее нечетное числонабор тильд, если они не находятся в совпадающих парах:
replaceOddTildes("An ~~un~~ paired ~~example!").equals("An **un~~ paired ~~example!")`
Если вы хотите обрабатывать несопоставленную пару, конечно, тогда все в порядке.
Подробно по шаблону:
(?: a non-capturing group, consisting of
~~ a pair of tildes, followed by
( a capturing group, consisting of
[^~]+ one or more characters that is not a tilde, followed by
~~ a pair of tildes
) end of the capturing group
) end of the non-capturing group
Замена для совпадения - пара звездочек, за которой следует содержимое группы захвата.