我想检查一个字符串中;
或AND
块的括号内是否有分号(OR
)。
例如:
IF(AND(ROUND($GX18-SUM(0)/$M$12;2)<=0;$AK$7=1);0;OR(1;A2)+O2)
如果AND
或OR
中的不,则我将其替换为#
:
IF(AND(ROUND($GX18-SUM(0)/$M$12;2)<=0$AK$7=1)#0#OR(1;A2)+O2)
我知道如何进行替换,但是如何检测;
是否在这样的块中呢?
更新
使用正则表达式可能看起来相当复杂。但是,要打破这个问题:
如何检测某个字符(;
)是否在AND(...)
或OR(...)
范围内?这对我有很大的帮助!
答案 0 :(得分:2)
希望以下java代码有助于解决您的问题,
String str = "IF(AND(ROUND($GX18-SUM(0)/$M$12;2)<=0$AK$7=1);0;OR(1;A2)+O2)";
char[] ch = str.toCharArray();
int count = 0;
String temp = "";
for (int i = 0; i < ch.length; i++) {
temp = temp + ch[i];
if ("AND(".equals(temp) || "OR(".equals(temp)) {
count++;
}
if ("(".equals(temp) && count > 0) {
count++;
}
if (")".equals(temp) && count > 0) {
count--;
}
if (";".equals(temp) && count == 0) {
ch[i] = '#';
}
if ((!"AND(".startsWith(temp) && !"OR(".startsWith(temp)) || temp.length() > 4) {
temp = "";
}
}
System.out.println("Expected Data >> " + String.valueOf(ch));