package fr.titionfire.ffsaf.utils; public class StringSimilarity { public static int similarity(String s1, String s2) { String longer = s1, shorter = s2; if (s1.length() < s2.length()) { longer = s2; shorter = s1; } int longerLength = longer.length(); if (longerLength == 0) { return 1; } return editDistance(longer, shorter); } public static int editDistance(String s1, String s2) { s1 = s1.toLowerCase(); s2 = s2.toLowerCase(); int[] costs = new int[s2.length() + 1]; for (int i = 0; i <= s1.length(); i++) { int lastValue = i; for (int j = 0; j <= s2.length(); j++) { if (i == 0) costs[j] = j; else { if (j > 0) { int newValue = costs[j - 1]; if (s1.charAt(i - 1) != s2.charAt(j - 1)) newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1; costs[j - 1] = lastValue; lastValue = newValue; } } } if (i > 0) costs[s2.length()] = lastValue; } return costs[s2.length()]; } public static void printSimilarity(String s, String t) { System.out.printf( "%d is the similarity between \"%s\" and \"%s\"%n", similarity(s, t), s, t); } /*public static void main(String[] args) { printSimilarity("Xavier Login", "Xavier Lojin"); printSimilarity("Xavier Login", "Xavier ogin"); printSimilarity("Xavier Login", "avier Login"); printSimilarity("Xavier Login", "xavier login"); printSimilarity("Xavier Login", "Xaviér Login"); printSimilarity("Xavier Gomme Login", "Xavier Login"); printSimilarity("Xavier Login", "Xavier Gomme Login"); printSimilarity("Xavier Login", "Xavier"); printSimilarity("Xavier Login", "Login"); printSimilarity("Jule", "Julles"); printSimilarity("Xavier", "Xaviér"); printSimilarity("Xavier", "xavvie"); }*/ }