replace
чувствителен только к регистру.
Не существует "простого" способа сделать это: вы можете сделать две замены, но это создает промежуточную строку.
String result = s.replace('p', 'b').replace('P', 'B');
Я бы сделал это путем итерации массива символов:
char[] cs = s.toCharArray();
for (int i = 0; i < cs.length; ++i) {
switch (cs[i]) {
case 'p': cs[i] = 'b'; break;
case 'P': cs[i] = 'B'; break;
}
}
String result = new String(cs);
Если вы хотите написать метод, который делает это для не жестко закодированных букв, вы можете сделать это следующим образом:
String method(String s, char from, char to) {
char ucFrom = Character.toUpperCase(from); // Careful with locale.
char ucTo = Character.toUpperCase(to);
char[] cs = s.toCharArray();
for (int i = 0; i < cs.length; ++i) {
if (cs[i] == from) { cs[i] = to; }
else if (cs[i] == ucFrom) { cs[i] = ucTo; }
}
return new String(cs);
}