java.lang.StringIndexOutOfBoundsException:编辑两个字符串之间的距离是一个

时间:2015-12-14 04:38:45

标签: java string exception indexoutofboundsexception

我正在尝试检查两个字符串之间的编辑距离是否为一个

两个字符串之间的编辑是以下更改之一。

添加一个角色 删除一个字符 更改角色

我正面临" StringIndexOutOfBoundsException"。

我是否需要检查任何内容以防止我的代码中出现此异常?

public class OneDiff { 
public OneDiff(String s,String s2){
int count=0;    
for (int i=0;i<(s.length()+s2.length());i++){
    if(s.charAt(i)!= s2.charAt(i)){
        count++;
            }
}
if(count==1){
    System.out.println("one difference");
}
}
public static void main(String args[]){
String s= "xxx";
String s1="xxxy";
OneDiff od=new OneDiff(s,s1);
}
}

3 个答案:

答案 0 :(得分:0)

正如@Ramanlfc和@YoungHobbit解释的那样,因为你的长度是 0 ,所以它会抛出StringIndexOutOfBoundsException

但是为了计算字符串的距离,你的算法是错误的,你需要实现Levenshtein distance来计算字符串的编辑距离。

答案 1 :(得分:0)

for (int i=0;i<(s.length()+s2.length());i++){

(s.length()+s2.length())会超过任意一个字符串的长度,并提供StringIndexOutOfBoundsException

答案 2 :(得分:0)

是的,为了防止异常,您需要确保i不大于任何String s长度。您可以通过将循环设置为只包含与最小String的长度一样多的迭代来实现。

以下是一个例子:

for (int i=0;i<Math.min(s.length(),s2.length());i++){
    if(s.charAt(i)!= s2.charAt(i)){
        count++;
    }
}

考虑到长度差异,你可以这样做:

count += Math.abs(s.length() - s2.length());