如何计算字符串中的括号数量?

5

以下是我用来计算字符串中括号数量的方法。

public int checkParenthesis(String print, char par){
    int num = 0;
    for(int i = 0; i<print.length(); i++){
        if(print.indexOf(i) == par){
            num++;
        }
    }
    return num;
}

它不工作。它会返回0。 print是一个随机字符串,而par则代表括号。


文档是你的好朋友。传递给 indexOf 的参数被视为字符,而不是索引。 - VGR
顺便问一下,是否将非括号字符去除后再计算剩余字符会更有意义呢?你还可以进行两次替换 - 一次为 (,另一次为 ) 并比较它们的数量是否平衡。 - Lee_Dailey
6个回答

4
你需要使用 .charAt 方法获取当前字符,并将其与 par 进行比较:
if(print.charAt(i) == par)

还有另一种方法:

for(char c : print.toCharArray()) {
  if(c == par) {
    num++;
  }
}

3
你应该使用charAt而不是indexOf
两者的区别在于,charAt接受一个字符串中的位置(0, 1, ...),并返回该位置处的字符。 indexOf接受一个字符,并在字符串中搜索该字符第一次出现的位置。你正在向indexOf传递一个int,而不是char,但编译器由于隐式转换而“接受”了这个参数。

1
在Java中,indexOf用于检查索引处的字符。您可以使用string.charAt(index)来获得所需的结果,而不是使用indexOf。请注意,保留HTML标签。
public int checkParenthesis(String print, char par){
    int num = 0;
    for(int i = 0; i<print.length(); i++){
        if(print.charAt(i) == par){
            num++;
        }
    }
    return num;
}

与其说“用于检查索引处的ch”,不如说“用于查找字符的索引”。 - Gautham M

1

正如其他人指出的那样,你当前的算法是使用循环检查每个索引处的字符。这对于String.charAt(int)是适当的,但不适用于String.indexOf(int)。然而,你可以使用String.indexOf(int, int)来实现它。另外,我更喜欢预先检查null和空输入。最后,你的方法计算匹配字符(而不是“检查括号”),并且不依赖于类状态,因此我会将其设置为static。类似于:

public static int countChar(String print, char par) {
    if (print == null || print.isEmpty()) {
        return 0;
    }
    int num = 0;
    int pos = -1;
    while ((pos = print.indexOf(par, pos + 1)) != -1) {
        num++;
    }
    return num;
}

1
自从Java 9以后,您可以使用String#codePoints方法:
static long characterCount(String str, char ch) {
    // filter the desired characters and return their quantity
    return str.codePoints().filter(cp -> cp == ch).count();
}

public static void main(String[] args) {
    System.out.println(characterCount("srting))", ')')); // 2
    System.out.println(characterCount("{srting}", '{')); // 1
    System.out.println(characterCount("(srting)", 's')); // 1
    System.out.println(characterCount("[srting]", 'ё')); // 0
}

另请参阅: 在数组中返回仅存在一次的整数的递归方法


0

还有一种方法,但需要创建额外的字符串对象:

 int cnt=print.length()-print.replaceAll(String.valueOf(c),"").length();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接