У вас две проблемы
- Опечатка.
- Аргумент 1 st для
replaceAll
интерпретируется как Регулярное выражение (regex) , а [ ]
определяет класс символов (имеет особое значение в регулярном выражении).
Как решить?
- Исправьте опечатку:
"[member]]"
⟹ "[member]"
- Если вы хотите использовать
replaceAll
, вам нужно escape [ ]
⟹ "\\[member]"
В качестве альтернативы вы можете использовать метод replace
, который не принимает регулярное выражение в качестве аргумента 1 st , но передается в строке как литерал (что означает как есть ). Однако вам все равно нужно исправить опечатку, как в messages[number].replace("[member]", ...)
.
Вероятно, проще всего взглянуть на это в упрощенном виде
static String[] messages = {
"[member] joined. You must construct additional pylons.",
"Never gonna give [member] up. Never let [member] down!",
"Hey! Listen! [member] has joined!",
"Ha! [member] has joined! You activated my trap card!",
"We've been expecting you, [member].",
"It's dangerous to go alone, take [member]!",
"Swoooosh. [member] just landed.",
"Brace yourselves. [member] just joined the server.",
"A wild [member] appeared.",
"Is it hot in here or is it just me? Oh [member] joined that explains it"
};
public static void main(String[] args) {
Random rand = new Random();
int number = rand.nextInt(messages.length);
String member = "Stanley42";
String original = messages[number].replaceAll("[member]]", member);
String originalWithEscaping = messages[number].replaceAll("\\[member]]", member);
String fixedOriginal = messages[number].replaceAll("\\[member]", member);
String useReplace = messages[number].replace("[member]]", member);
String fixedUseReplace = messages[number].replace("[member]", member);
System.out.println(original);
System.out.println(originalWithEscaping);
System.out.println(fixedOriginal);
System.out.println(useReplace);
System.out.println(fixedUseReplace);
}
даст вам этот пример вывода
Never gonna give [membeStanley42 up. Never let [membeStanley42 down!
Never gonna give [member] up. Never let [member] down!
Never gonna give Stanley42 up. Never let Stanley42 down!
Never gonna give [member] up. Never let [member] down!
Never gonna give Stanley42 up. Never let Stanley42 down!