计算数学方程字符串中的字母和单词
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() 方法 如果 逻辑上找到匹配项。对于更具体的范围,我还使用了圆括号而不是开括号。
不过,提醒我的是,有时我们可能需要另一双眼睛。谢谢!
所以,我编写了一个名为 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() 方法 如果 逻辑上找到匹配项。对于更具体的范围,我还使用了圆括号而不是开括号。
不过,提醒我的是,有时我们可能需要另一双眼睛。谢谢!