import java.util.*;
import java.util.regex.*;
import java.lang.*;
import java.io.*;
class Ideone
{
{
String s
= "Код %здесь%, кот %там%"; h.put("здесь" , "на земле");
h.put("там" , "в раю");
System.
out.
println(convertTree
(s, h
)); }
Pattern pattern = Pattern.compile("%(\\p{L}+)%"); // Задаем шаблон
Matcher m = pattern.matcher(s); // Инициализация Matcher
while (m.find()) { // Проверка на совпадение
if (conv.containsKey(m.group(1))) { // Проверка на наличие ключа
m.appendReplacement(result, conv.get(m.group(1))); // Подставляем значение из HashMap
}
else {
m.appendReplacement(result, m.group(0)); // Или найденное совпадение, если ключ не найден
}
}
m.appendTail(result); // Добавить остаток строки
return result.toString();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4Lio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKCmNsYXNzIElkZW9uZQp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KICAgIHsKICAgICAgICBTdHJpbmcgcyA9ICLQmtC+0LQgJdC30LTQtdGB0YwlLCDQutC+0YIgJdGC0LDQvCUiOwogICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGggPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICAgICBoLnB1dCgi0LfQtNC10YHRjCIgLCAi0L3QsCDQt9C10LzQu9C1Iik7CiAgICAgICAgaC5wdXQoItGC0LDQvCIgLCAi0LIg0YDQsNGOIik7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvbnZlcnRUcmVlKHMsIGgpKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udmVydFRyZWUoU3RyaW5nIHMsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvbnYpIHsKICAgICAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIiUoXFxwe0x9KyklIik7IC8vINCX0LDQtNCw0LXQvCDRiNCw0LHQu9C+0L0KICAgICAgICBNYXRjaGVyIG0gPSBwYXR0ZXJuLm1hdGNoZXIocyk7ICAgICAgICAgICAgIC8vINCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPIE1hdGNoZXIKICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOyAgIC8vINCR0YPRhNC10YAg0LTQu9GPINC60L7QvdC10YfQvdC+0LPQviDQt9C90LDRh9C10L3QuNGPCiAgICAgICAgd2hpbGUgKG0uZmluZCgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINC90LAg0YHQvtCy0L/QsNC00LXQvdC40LUKICAgICAgICAgICAgaWYgKGNvbnYuY29udGFpbnNLZXkobS5ncm91cCgxKSkpIHsgICAgIC8vINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQvdCw0LvQuNGH0LjQtSDQutC70Y7Rh9CwCiAgICAgICAgICAgICAgICBtLmFwcGVuZFJlcGxhY2VtZW50KHJlc3VsdCwgY29udi5nZXQobS5ncm91cCgxKSkpOyAvLyDQn9C+0LTRgdGC0LDQstC70Y/QtdC8INC30L3QsNGH0LXQvdC40LUg0LjQtyBIYXNoTWFwCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7IAogICAgICAgICAgICAgICAgbS5hcHBlbmRSZXBsYWNlbWVudChyZXN1bHQsIG0uZ3JvdXAoMCkpOyAgLy8g0JjQu9C4INC90LDQudC00LXQvdC90L7QtSDRgdC+0LLQv9Cw0LTQtdC90LjQtSwg0LXRgdC70Lgg0LrQu9GO0Ycg0L3QtSDQvdCw0LnQtNC10L0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBtLmFwcGVuZFRhaWwocmVzdWx0KTsgICAgICAgIC8vINCU0L7QsdCw0LLQuNGC0Ywg0L7RgdGC0LDRgtC+0Log0YHRgtGA0L7QutC4CiAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgfQp9