用于条件匹配和字符串匹配

时间:2015-10-25 13:47:28

标签: java loops

给定2个字符串a和b,返回它们包含相同长度2子串的位置数。因此"xxcaazz""xxbaaz"产生3,因为"xx""aa""az"子字符串出现在两个字符串的相同位置。

我的代码:为某些输入抛出IndexOutOfBoundsException

public int stringMatch(String a, String b) {
    int count=0;
    for(int i=0;i<a.length()-1;i++){        
       if(a.charAt(i)==b.charAt(i)) 
           if (a.charAt(i+1)==b.charAt(i+1)){
               count +=1;
           }
    }
    return count;

}

每当我为这些类型的问题编写代码时,我总是会遇到&#34; Index out of bounds&#34;我必须将循环length(a.length()-1更改为a.length()-2)左右。当循环体变为i + 1或增加很多时,是否有任何可靠的方法来确定循环长度。

2 个答案:

答案 0 :(得分:4)

for(int i=0;i<a.length()-1;i++)

迭代第一个String a字符对的正确方法。

但是,你有两个String的长度可能不同,但for循环的条件只测试a的长度,这可能比b长,所以b.charAt(i)b.charAt(i+1)可能会引发异常。

你应该用两个字符串的长度限制你的循环:

for(int i=0;i<a.length()-1 && i<b.length()-1;i++)

这将避免IndexOutOfBoundsException

答案 1 :(得分:0)

你可以反过来检查a和b的长度:

for(int i=1;i < Math.min(a.length(), b.length);i++){        
   if(a.charAt(i-1)==b.charAt(i-1)) 
       if (a.charAt(i)==b.charAt(i)){
           count +=1;
       }
}

这不会进入像"a"这样的字符串的循环,因为长度为1不小于1,它会将循环限制为最短的字符串。