计算数学方程字符串中的字母和单词

Counting Letters & Words in a Math Equation String

所以,我编写了一个名为 varCount() 的方法,如下所示,它可以计算数学方程式中字母变量的数量。

// This method counts the number of variables in the equation
    /* Note: If a variable is a word or a substring with length greater than 1,
       then count it as a whole */
    public int varCount(){
        int count = 0;
        for (int i = 0; i < getEquation().length(); i++){
            if ((getEquation().charAt(i) >= 65 && getEquation().charAt(i) <= 90)
            || (getEquation().charAt(i) >= 97 && getEquation().charAt(i) <= 122)){
                count++;
            }
        }
        return count;
    }

这个方法是在class里面做的,所以这里用到了私有方程字符串属性的getter方法

由此产生的结果的一个示例是,如果您在字符串 x + 2 = 3 上使用该方法,将会有 1 个字母变量,即 x,算了。经过测试,该方法返回了预期的 int 值,并且可以正常运行。

我真正想要完成的是,如果用户输入了一个像 num 这样的变量,那么该方法应该仍然像第二条评论一样工作。

第一次尝试时,我想,既然是num这样的单词,那么,如果把前一个字符算作一个字母,那么整个单词就是通过仅计算第一个字母来计算,如下所示:

// This method counts the number of variables in the equation
    /* Note: If a variable is a word or a substring with length greater than 1,
       then count it as a whole */
    public int varCount(){
        int count = 0;
        for (int i = 0; i < getEquation().length(); i++){
            if ((getEquation().charAt(i) >= 65 && getEquation().charAt(i) <= 90)
            || (getEquation().charAt(i) >= 97 && getEquation().charAt(i) <= 122)){
                if (i != 0 && (getEquation().charAt(i-1) >= 65 && getEquation().charAt(i-1) <= 90)
                || (getEquation().charAt(i-1) >= 97 && getEquation().charAt(i-1) <= 122)){
                    continue;
                }
                count++;
            }
        }
        return count;
    }

问题在于该方法仅导致 IndexOutOfBoundsException

接下来的尝试是使用 regex 包修改或替换方法主体,使用 Matcher class 的 groupCount() 方法返回 0,像这样:

// This method counts the number of variables in the equation
    /* Note: If a variable is a word or a substring with length greater than 1,
       then count it as a whole */
    public int varCount(){
        Pattern alphaRange = Pattern.compile("[a-zA-Z]");
        Matcher match = alphaRange.matcher(getEquation());
        System.out.println(match.groupCount());
        return match.groupCount();
    }

关于此方法,我遗漏了什么或出了什么问题?

好的,我修改了方法以使用正则表达式包的模式和匹配器 class 并设法使程序完全按预期运行。

// This method counts the number of variables in the equation
    /* Note: If a variable is a word or a substring with length greater than 1,
       then count it as a whole */
    public int varCount(){
        int count = 0;
        Pattern pattern = Pattern.compile("(a-zA-Z)*");
        Matcher match = pattern.matcher(getEquation());
        if (match.find()){
            count = match.groupCount();
        }
        return count;
    }

我没有意识到需要处理 groupCount() 方法 如果 逻辑上找到匹配项。对于更具体的范围,我还使用了圆括号而不是开括号。

不过,提醒我的是,有时我们可能需要另一双眼睛。谢谢!