2015-12-14 26 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());