1

目标是让它计算给定字符串中“xx”的数量。我们会说允许重叠,所以“xxx”包含 2 个“xx”。

请参阅http://codingbat.com/prob/p194667 我似乎无法弄清楚为什么它不起作用

    int countXX(String str) {
        int f = 0;
        for (int i = 0; i < str.length(); i++){
            if (!str.substring(i+1).isEmpty()){
                if (str.substring(i) == "x" && str.substring (i+1) == "x") {
                    f++;
                }
            }
        }
        return f;  
    }
4

6 回答 6

4

具有一个参数的substring方法不仅仅获取该位置的那个字符,它获取从该位置到字符串末尾的所有内容。用于charAt获取该位置的字符,并将其与==字符文字进行比较'x',而不是与String "x".

于 2013-05-03T21:51:13.110 回答
4

不要使用子字符串来索引字符。

int countXX(String str) {
   int f = 0;
   for (int i = 0; i < str.length()-1; i++) {
      if( str.charAt(i) == 'x' && str.charAt(i+1) == 'x' ) {
         f++;
      }
   }
   return f;  
}
于 2013-05-03T21:53:40.540 回答
4

不要使用 == 来比较字符串;使用等于()。

int countXX(String str) {
    int f = 0;
    for (int i = 0; i < str.length(); i++) {
        if (!str.substring(i+1).isEmpty()) {
            if (str.substring(i).equals("x") && str.substring(i+1).equals("x")) {
                f++;
            }
        }
    }
    return f;  
}

我认为当i等于字符串的长度减去 1 并且您尝试在(i+1).

于 2013-05-03T21:48:22.477 回答
2

三个原因:

  1. substring() 返回整个字符串(因此从“i”开始到字符串的结尾,而不仅仅是一个字母)。
  2. 与 .equals() 比较,而不是 ==
  3. "i" 应该以 str.length() - 1 结束
于 2013-05-03T21:52:29.087 回答
1

使用字符串的 'equals' 方法代替 == :

int countXX(String str) {
    int f = 0;
    for (int i = 0; i < str.length(); i++){
    if (!str.substring(i+1).isEmpty()){
    if (str.substring(i).equals("x") && str.substring (i+1).equals("x")) {
    f++;}}}
    return f;  
    }
于 2013-05-03T21:49:17.403 回答
0
int countXX(String str) {
    int f = 0;
    for (int i = 0; i < str.length() - 1; i++){
        if (str.substring(i, i + 2).equals("xx")) {
            f++;
        }
    }
    return f;  
}
于 2013-05-03T21:53:39.703 回答