问题描述
我正在使用
String message = event.message.getFormattedText();
获取消息文本,目前我将 minecraft 玩家的用户名更改为 message = message.replaceAll("(?i)" + minecraft.getminecraft().thePlayer.getName(),NameAndColorUtils.nickname);
。但是,某些消息的结构如下:
Title [RANK] Username: Message
Rookie [VIP] Player: Hello!
我希望能够同时获取分隔符“[”和“]”,以及两者之间的文本,并将其替换为我选择的字符串。例如,将 [VIP] 更改为 [MVP],或者完全移除排名(取决于用户的输入)。我该怎么做?
解决方法
使用正则表达式替换循环,例如像这样:
static String replace(String message) {
StringBuffer buf = new StringBuffer();
Matcher m = Pattern.compile("\\[([^\\]]+)\\](\\s*)").matcher(message);
while (m.find()) {
String tag = m.group(1);
if (tag.equals("RANK")) {
// Remove tag and trailing space
m.appendReplacement(buf,"");
} else if (tag.equals("VIP")) {
// Replace tag and keep trailing space
m.appendReplacement(buf,"{MVP}" + m.group(2));
}
// No else clause means that text is left intact for unknown tags
}
return m.appendTail(buf).toString();
}
测试
System.out.println(replace("Title [RANK] Username: Message"));
System.out.println(replace("Rookie [VIP] Player: Hello!"));
System.out.println(replace("Hello [FOO] World"));
输出
Title Username: Message
Rookie {MVP} Player: Hello!
Hello [FOO] World