替换 Java 中的单词时保持相同的大小写

Keep the same case when replacing words in Java

我对 Java 比较陌生,所以请原谅任何白痴。

我正在使用 Bukkit 为 Minecraft 制作一个小插件。我想让它用正确的形式替换常见的语法错误。 这是我的代码:

@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

有没有办法在保持大小写正确的情况下替换单词?

使用捕获组:

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

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

您还应该使用 \b 作为单词边界,这样您就不会无意中将 "orthodontist" 之类的单词更改为 "orthodon'tist"。