我正在尝试检查两个字符串之间的编辑距离是否为一个
两个字符串之间的编辑是以下更改之一。
添加一个角色 删除一个字符 更改角色
我正面临" 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);
}
}
答案 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());