【问题标题】:How do I count the parentheses in a string?如何计算字符串中的括号?
【发布时间】:2021-05-24 01:14:38
【问题描述】:

这是我计算字符串中括号个数的方法。

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 是括号。

【问题讨论】:

  • The documentation 是你的朋友。传递给 indexOf 的参数被视为字符,而不是索引。
  • 顺便说一句,删除非括号然后计算剩余的字符不是更有意义吗?您还可以进行两次替换 - 一个用于(,另一个用于),如果需要平衡它们,请比较计数。

标签: java string char


【解决方案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
}

另见:Recursive method that returns true if the integer exists only once in an array

【讨论】:

    【解决方案2】:

    只是另一种方式,但需要创建额外的 String 对象:

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

    【讨论】:

      【解决方案3】:

      正如其他人所指出的,您当前的算法正在使用循环检查每个索引处的字符。这适用于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;
      }
      

      【讨论】:

        【解决方案4】:

        在 java 中,indexOf 用于检查索引处的 ch。您可以使用string.charAt(index) 而不是indexOf 来获得所需的结果。

        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;
        }
        

        【讨论】:

        • 与其说used for checking ch at index,不如说used for finding the index of a character更容易理解
        【解决方案5】:

        您的意思是 charAt 而不是 indexOf

        不同之处在于charAt 在字符串(0, 1, ...) 中取一个位置并返回该位置的字符。 indexOf 接受一个字符,并在字符串中搜索找到该字符的第一个位置。您将int 传递给indexOf,而不是char,但编译器接受此“感谢”隐式转换。

        【讨论】:

          【解决方案6】:

          需要使用.charAt获取当前字符并与par比较:

          if(print.charAt(i) == par)
          

          另一种方法:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-19
            • 1970-01-01
            • 1970-01-01
            • 2012-09-09
            • 1970-01-01
            • 2015-10-01
            相关资源
            最近更新 更多