如何把几个"Sqrt [里面的一些文字]"变成几个Sqrt(里面的一些文字),我的意思是从[]到()

Dan*_*iel 6 java regex

我得到了下面的表达式,看起来像这样(Sqrt [XXX]的数量是未知的)

Sqrt[A+B] + Sqrt[Min[A,B]] * Min[Sqrt[C],D]
Run Code Online (Sandbox Code Playgroud)

我希望把所有 Sqrt[XXX]Sqrt(XXX),我想更换[]的支架Sqrt()支架

所以上面的例子看起来像

Sqrt(A+B) + Sqrt(Min[A,B]) * Min[Sqrt(C),D]

我不想"伤害" []表达式中的其他括号(如旁边的那些Min)

我怎么能用正则表达式做到这一点?

dog*_*ane 3

您可以通过对字符串中的字符进行迭代来完成此操作。首先查找 的索引Sqrt[,然后查找匹配的右括号。

这是一些示例代码:

final String s = "Sqrt[A+B] + Sqrt[Min[A,B]] * Min[Sqrt[C],D]";
final char[] charArray = s.toCharArray();

int index = s.indexOf("Sqrt[");
while (index != -1) {
    final int open = index + 4;
    charArray[open] = '(';

    // look for closing bracket
    int close;
    int matching = 0;
    for (close = open + 1; close < charArray.length; close++) {
        char c = charArray[close];
        if (c == ']') {
            if (matching == 0) {
                break;
            }
            matching--;
        } else if (c == '[') {
            matching++;
        }
    }
    charArray[close] = ')';
    index = s.indexOf("Sqrt[", index + 1);
}
System.out.println(new String(charArray));
Run Code Online (Sandbox Code Playgroud)

我还没有正确测试过,所以请这样做。