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

java.lang.StringIndexOutOfBoundsException:两个字符串之间的编辑距离为一,java,string,exception,indexoutofboundsexception,Java,String,Exception,Indexoutofboundsexception,我试图检查两个字符串之间的编辑距离是否为1 两个字符串之间的编辑是以下更改之一 添加字符 删除字符 换个角色 我面临着“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

我试图检查两个字符串之间的编辑距离是否为1

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

添加字符 删除字符 换个角色

我面临着“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);
}
}
公共类OneDiff{
公共OneDiff(字符串s、字符串s2){
整数计数=0;

对于@Ramanlfc和@YoungHobbit解释的(int i=0;i),因为您的长度为0,所以它将抛出
StringIndexOutOfBoundsException


但是,对于字符串距离的计算,您的算法是错误的,您需要实现以计算字符串的编辑距离。

(int i=0;i是,为了防止出现异常,您需要确保
i
不大于任何
字符串的长度。您可以通过将循环的迭代次数设置为与最小
字符串的长度相同来做到这一点

for (int i=0;i<(s.length()+s2.length());i++){
以下是一个例子:

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

哪个语句引发异常?输入字符串是什么?请访问并阅读。
int length=0;for(int i=0;i
length为0使用
length-1
in for loop给定length=0时,for循环将不会运行。奇怪的是,您的代码是如何执行的,为什么会执行。for循环和if语句将不会执行,因为length初始化为零
count += Math.abs(s.length() - s2.length());