Мне нужно экранировать символы, которые существуют в строке, но экранирующие символы являются частью кода перехода, т. Е.
Map<String, String> escapeChars = new HashMap<String, String>();
escapeChars.put("^", "^94;");
escapeChars.put("%", "^37;");
escapeChars.put("'", "^39;");
public String findEscapeChars(String x) {
for(Map.Entry<String, String> entry : escapeChars.entrySet()) {
if(x.contains(entry.getKey()) ) {
x = x.replaceAll(entry.getKey(), entry.getValue());
}
}
return x;
}
//result should match
assertEquals("^37;", findEscapeChars("%")); //example of the caret symbol escaping
assertEquals("^37; 1 2 ^39; ^94; 4 ^37;", findEscapeChars("% 1 2 ' ^ 4 %"));
Это действительно нужно сделать в одном цикле и только в одном условии. Проблема в том, что хеш-карта не пересекается в определенном порядке, поэтому символ каретки может попытаться убежать сам в строке. Это кажется хитрым без многочисленных циклов, и если бы условия, простое решение было бы идеальным.
Спасибо
D