2015-12-14 53 views
-2

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

两个字符串之间的编辑是下列变化之一。

添加字符 删除字符 更改字符

而且我面临着“的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); 
} 
} 
+1

哪种说法引发异常?什么是输入字符串?请访问[帮助]并阅读[问]。 –

+0

'int length = 0;对于(int i = 0; i Ramanlfc

+1

给定长度= 0,for循环将不会运行。 – YoungHobbit

回答

0

由于@Ramanlfc和@YoungHobbit解释,因为你的长度为,所以它会抛出StringIndexOutOfBoundsException

但对于您的字符串的距离的计算,你的算法是错误的,你需要成真Levenshtein distance来计算字符串的编辑距离。

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

(s.length()+s2.length())将带你超越任何字符串的长度,并给予StringIndexOutOfBoundsException

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());