Как я могу добавить символ в регулярное выражение, которое меняется каждый раз? - PullRequest
0 голосов
/ 11 февраля 2020
    String s = scan.nextLine();

    s = s.replaceAll(" ","");

    for (int i=0;i<s.length();i++)
    {
        System.out.print(s.charAt(i) + "-");
        int temp = s.length();

        // this line is the problem
        s = s.replaceAll("[s.charAt(i)]",'');

        System.out.print((temp-s.length()) + "\n");
        i=-1;


    }

Я фактически использовал вышеупомянутый метод для подсчета каждого символа.

Я хотел использовать s.charAt(i) внутри Регулярного выражения, чтобы он считался и отображался, как показано ниже. Но эта строка (строка 10) не работает, я знаю.

Если это возможно, как я могу это сделать?

Пример:

MALAYALAM (вход)
M-2
A-4
L-2
Y-1

1 Ответ

1 голос
/ 11 февраля 2020

Java не имеет строковой интерполяции , поэтому код, написанный внутри строкового литерала, не будет выполнен; это просто часть строки. Вместо этого вам нужно будет сделать что-то вроде "[" + s.charAt(i) + "]", чтобы программно построить строку.

Но это проблематично c, когда символ является специальным символом регулярного выражения, например ^. В этом случае класс символов будет [^], что соответствует абсолютно любому символу. Вы могли бы избежать специальных символов регулярного выражения при создании регулярного выражения, но это слишком сложно.

Поскольку вы просто хотите заменить вхождения точной подстрокой, проще использовать метод replace который не принимает регулярное выражение. Не обманывайтесь именем replace против replaceAll; оба метода заменяют все вхождения , разница действительно в том, что replaceAll принимает регулярное выражение, а replace просто принимает точную подстроку. Например:

> "ababa".replace("a", "")
"bb"
> "ababa".replace("a", "c")
"cbcbc"
...