我得到了下面的表达式,看起来像这样(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)
我怎么能用正则表达式做到这一点?
您可以通过对字符串中的字符进行迭代来完成此操作。首先查找 的索引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)
我还没有正确测试过,所以请这样做。