Сохраняйте тот же случай при замене слов в Java - PullRequest
0 голосов
/ 11 ноября 2019

Я относительно новичок в Java, так что простите за любой идиотизм.

Я делаю небольшой плагин для Minecraft, используя Bukkit. Я хочу заставить его заменить распространенные грамматические ошибки их правильными формами. Вот мой код:

@EventHandler
public void onChat(AsyncPlayerChatEvent event){
    String message = event.getMessage().replaceAll("(?i)dont", "don't")
            .replaceAll("(?i)youre","you're");

    event.setMessage(message);
}

Это прекрасно работает при замене dont на don't и youre на you're. Проблема этого метода заключается в том, что он заменит DONT на don't вместо DON'T. DoNt -> don't вместо DoN't

Можно ли заменить слова, сохраняя правильный регистр?

1 Ответ

4 голосов
/ 11 ноября 2019

Используйте группы захвата:

> "DoNt".replaceAll("(?i)\\b(don)(t)\\b", "$1'$2")
"DoN't" (String)

> "YoUrE".replaceAll("(?i)\\b(you)(re)\\b", "$1'$2")
"YoU'rE" (String)

Вы также должны использовать \b для границы слова, чтобы случайно не изменить слова, такие как «ортодонт», на «ортодонтик».

...