首页 > 解决方案 > 如何在每次更改的正则表达式中添加一个字符?

问题描述

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 (input)
          M-2
          A-4
          L-2
          Y-1

标签: javaregexstringcharacterreplaceall

解决方案


Java 没有字符串插值,所以写在字符串字面量内的代码不会被执行;它只是字符串的一部分。您需要做类似"[" + s.charAt(i) + "]"的事情来以编程方式构建字符串。

但是当字符是正则表达式特殊字符时,这是有问题的,例如^。在这种情况下,字符类是[^],它绝对匹配任何字符。您可以在构建正则表达式时转义正则表达式特殊字符,但这过于复杂。

由于您只想替换出现的确切子字符串,因此使用replace不采用正则表达式的方法更简单。不要被名字replacevs.所迷惑replaceAll这两种方法都替换了所有出现的情况,不同之处在于它replaceAll需要一个正则表达式,但replace只需要一个精确的子字符串。例如:

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

推荐阅读