2015-06-19 4 views
1

Есть ли способ сравнения двух значений String, таких как .compareTo, но который возвращает количество букв, которые не совпадают?Разница между строками

Пример:

"SomeString".anotherCompareTo("SomeStrng") -> 1 
"SomeString".anotherCompareTo("SmeStrng") -> 2 
"SomeString".anotherCompareTo("SomeStrong") -> 1 

Я ничего не могу найти. Я попытался преобразовать его в charArrays и написать метод самостоятельно, но не смог. Если это невозможно, может быть, есть метод, который сравнивает две строки с одинаковой длиной, которая возвращает количество «ошибок»?

+2

Второй должен быть "2", не так ли? – markspace

+0

Итак, вы в основном хотите [Левенштейновское расстояние] (https://en.wikipedia.org/wiki/Levenshtein_distance)? Я не думаю, что это встроено в Java, но его относительно легко реализовать, множество примеров. – MikeTheLiar

+0

Что бы (например) '' acda ".anotherCompareTo (" bae ")' be? – Daniel

ответ

5

Apache Commons имеет метод Diff строк

StringUtils.difference(String str1, String str2)

, которые вы можете использовать, чтобы создать метод, который возвращает количество различий очень легко.

Edit:

Infact уже существует:

StringUtils.getLevenshteinDistance(String str1, String str2)

+0

Вторая ссылка не работает –

+1

Попробуйте сейчас, я только что внес некоторые изменения. –

1

в Java String.replaceAll(), кажется, делать то, что Вы желаете. Первый параметр является шаблоном регулярного выражения, поэтому вы просите заменить все символы в шаблоне пустой строкой, оставляя символы, которые не соответствуют шаблону.

public static void main(String[] args) { 
    String s1 = "SomeString"; 
    String s2 = "SomeStrng"; 
    String s3 = "SmeStrng"; 
    String s4 = "SomeStrong"; 

    String result = s1.replaceAll("[" + s2 + "]", ""); 
    System.out.println(result + ": " + result.length()); 

    result = s1.replaceAll("[" + s3 + "]", ""); 
    System.out.println(result + ": " + result.length()); 

    result = s1.replaceAll("[" + s4 + "]", ""); 
    System.out.println(result + ": " + result.length()); 
} 

Результаты:

i: 1 
oi: 2 
i: 1 
Смежные вопросы