#java #string #message #minecraft #delimiter
#java #строка #Сообщение #Minecraft #разделитель
Вопрос:
Я использую 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] или полное удаление ранга (в зависимости от ввода пользователя). Как бы я это сделал?
Ответ №1:
Используйте цикл замены регулярных выражений, например, что-то вроде этого:
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
Комментарии:
1. Могу ли я каким-либо образом получить тег непосредственно из сообщения пользователя, а затем заменить его там? Так, например, если пользователь отправляет сообщение [MVP] Игрок: Привет! он может получить тег ТОЛЬКО из сообщения пользователя, а затем заменить тег на [VIP]?
2. @Gungee Разве это не то, что делает этот код? Получение тега из сообщения , а затем решение, что с ним делать, например, замена его чем-то другим.