Java не имеет строковой интерполяции , поэтому код, написанный внутри строкового литерала, не будет выполнен; это просто часть строки. Вместо этого вам нужно будет сделать что-то вроде "[" + s.charAt(i) + "]"
, чтобы программно построить строку.
Но это проблематично c, когда символ является специальным символом регулярного выражения, например ^
. В этом случае класс символов будет [^]
, что соответствует абсолютно любому символу. Вы могли бы избежать специальных символов регулярного выражения при создании регулярного выражения, но это слишком сложно.
Поскольку вы просто хотите заменить вхождения точной подстрокой, проще использовать метод replace
который не принимает регулярное выражение. Не обманывайтесь именем replace
против replaceAll
; оба метода заменяют все вхождения , разница действительно в том, что replaceAll
принимает регулярное выражение, а replace
просто принимает точную подстроку. Например:
> "ababa".replace("a", "")
"bb"
> "ababa".replace("a", "c")
"cbcbc"