Как использовать функцию замены в Java для символов без учета регистра символов - PullRequest
0 голосов
/ 24 июня 2019

Я пишу Java-программу, в которой пользователь вводит серию слов, которые заменяют каждое 'p' на 'b' в предложении (без учета регистра) и отображают вывод.

Я пытаюсьиспользуйте функцию замены, но она не чувствительна к регистру

String result = s.replace('p', 'b');

Я ожидаю выход boliticians bromised, но фактические выходы Politicians bromised.

Ответы [ 3 ]

1 голос
/ 24 июня 2019

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);
}
0 голосов
/ 24 июня 2019

Вместо этого вы можете использовать replaceAll, чтобы вы могли использовать регулярное выражение:

String result = s.replaceAll("[pP]", "b");
0 голосов
/ 24 июня 2019

Вы можете сделать это с помощью регулярных выражений, см. Вопросы и ответы - Как заменить регистронезависимые литеральные подстроки в Java или вы можете использовать заменить дважды для p и P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...