给定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或增加很多时,是否有任何可靠的方法来确定循环长度。
答案 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,它会将循环限制为最短的字符串。