Получение определенной части строки с разделителями

#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 Разве это не то, что делает этот код? Получение тега из сообщения , а затем решение, что с ним делать, например, замена его чем-то другим.