为什么不是这个基本的Java程序工作?

问题描述:

目标是让它计算给定字符串中“xx”的数量。我们会说重叠是允许的,所以“xxx”包含2“xx”。为什么不是这个基本的Java程序工作?

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

这是首发者常见的错误。小心。 – Lion 2013-05-03 21:51:47

+0

虽然将字符串值与'=='进行比较是错误的,但这个问题更多的是关于'substring'错误地提取字符的问题。 – rgettman 2013-05-03 21:52:48

+1

我已投票重新提出这个问题;它不是任何常见的“==”与“等于”字符串比较问题的重复。 – rgettman 2013-05-03 21:59:58

不要使用==来比较字符串;使用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)访问的字符。

+0

.equals()仍然不起作用 – user1399888 2013-05-03 21:52:34

+0

仍然存在滥用'substring'从字符串中提取字符的问题。 – rgettman 2013-05-03 21:53:57

+0

而我 2013-05-03 21:54:47

使用字符串的“等于”方法==代替:

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

这只能部分解决问题。 – 2013-05-03 21:53:03

substring方法的一个参数就不会在该位置得到的只是这个角色,它通过得到的一切从该位置到字符串的结尾。使用charAt获取该位置的字符,并将其与==与字符文字'x'进行比较,而不是与String"x"进行比较。

理由三:

  1. 子()返回整个字符串(所以从“我”到字符串的结尾开始,而不是只有一个字母)。
  2. 比较.equals(),而不是==
  3. “我” 应该结束在str.length() - 1

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

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

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