public static List<String> findSimiliar(CharSequence match, Collection<String> potential) { List<String> list = new ArrayList<String>(3); // 1 switches or 1 extra char int maxDistance = 2; for (String string : potential) { int dist = levenshteinDistance(match, string, maxDistance); if (dist >= 0) { if (dist < maxDistance) { maxDistance = dist; list.clear(); list.add(string); } else if (dist == maxDistance) { list.add(string); } } } return list; }
@Test public void testDistance() { assertThat(levenshteinDistance("bar", "bor", 1), is(1)); assertThat(levenshteinDistance("bar", "bara", 1), is(1)); assertThat(levenshteinDistance("bar", "abar", 1), is(1)); assertThat(levenshteinDistance("bar", "abara", 3), is(2)); assertThat(levenshteinDistance("bar", "abora", 5), is(3)); assertThat(levenshteinDistance("bar", "arb", 3), is(2)); assertThat(levenshteinDistance("bar", "aarb", 2), is(2)); assertThat(levenshteinDistance("bar", "aarbx", 3), is(3)); assertThat(levenshteinDistance("bar", "aarbx", 2), is(-1)); }
public static List<String> findSimiliar(CharSequence match, Collection<String> potential) { List<String> list = new ArrayList<String>(3); // 1 switches or 1 extra char int maxDistance = 2; for (String string : potential) { int dist = levenshteinDistance(match, string, maxDistance); if (dist >= 0) { if (dist < maxDistance) { maxDistance = dist; list.clear(); list.add(string); } else if (dist == maxDistance) { list.add(string); } } } return list; }
public static List<String> findSimiliar(CharSequence match, Collection<String> potential) { List<String> list = new ArrayList<String>(3); // 1 switches or 1 extra char int maxDistance = 2; for (String string : potential) { int dist = levenshteinDistance(match, string, maxDistance); if (dist >= 0) { if (dist < maxDistance) { maxDistance = dist; list.clear(); list.add(string); } else if (dist == maxDistance) { list.add(string); } } } return list; }
public static List<String> findSimiliar(CharSequence match, Collection<String> potential) { List<String> list = new ArrayList<String>(3); // 1 switches or 1 extra char int maxDistance = 2; for (String string : potential) { int dist = levenshteinDistance(match, string, maxDistance); if (dist >= 0) { if (dist < maxDistance) { maxDistance = dist; list.clear(); list.add(string); } else if (dist == maxDistance) { list.add(string); } } } return list; }
public static List<String> findSimiliar(CharSequence match, Collection<String> potential) { List<String> list = new ArrayList<String>(3); // 1 switches or 1 extra char int maxDistance = 2; for (String string : potential) { int dist = levenshteinDistance(match, string, maxDistance); if (dist >= 0) { if (dist < maxDistance) { maxDistance = dist; list.clear(); list.add(string); } else if (dist == maxDistance) { list.add(string); } } } return list; }