为什么这个基本的java程序不起作用?

时间:2013-05-03 21:47:06

标签: java string for-loop

目标是让它计算给定字符串中“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;  
    }

6 个答案:

答案 0 :(得分:4)

不要使用==来比较字符串;使用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;  
}

我认为当i等于字符串长度减1并且您尝试访问(i+1)处的字符时,此代码仍会出现问题。

答案 1 :(得分:4)

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

答案 2 :(得分: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;  
}

答案 3 :(得分:2)

三个原因:

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

答案 4 :(得分: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;  
    }

答案 5 :(得分: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;  
}