2015-12-14 2 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

Какое утверждение бросает исключение? Каковы входные строки? Пожалуйста, посетите [помощь], а также прочитайте [ask]. –

+0

'int length = 0; for (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()); 
Смежные вопросы