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



我的目标是纠正消息中常见的语法错误。以下是我目前所写的内容:

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

这将用don't替换dont,用you're替换youre。问题是DONT被替换为don't,而不是DON'T

如何在保留案例的同时执行此替换?

使用捕获组:

> "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作为单词边界,这样你就不会无意中把"正畸医生"之类的单词改成"正畸专家"。

最新更新