我想检查分号(;)是否在字符串内的ANDOR块的括号中。

例如:

IF(AND(ROUND($GX18-SUM(0)/$M$12;2)<=0;$AK$7=1);0;OR(1;A2)+O2)

如果它是ANDOR中的而不是,那么我将其替换为#:
IF(AND(ROUND($GX18-SUM(0)/$M$12;2)<=0$AK$7=1)#0#OR(1;A2)+O2)

我知道如何进行替换,但是如何检测;是否在此类块内?

更新

使用正则表达式可能看起来很复杂。但是,要解决该问题:

如何检测某个char(;)是否在AND(...)OR(...)中?这对我有很大帮助!

最佳答案

希望遵循以下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));

关于java - 检查char是否在()块中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24286278/

10-11 07:12