public String migrate(String formattedString, String toBeFormattedString, Pattern format) { if (Strings.isEmpty(toBeFormattedString) || Strings.isEmpty(formattedString)) return toBeFormattedString; FormattedString formatted = createFormattedString(formattedString, format); FormattedString toBeFormatted = createFormattedString(toBeFormattedString, format); if (formatted.semantic.equals(toBeFormatted.semantic)) return formattedString; List<Mapping> mappings = Lists.newArrayList(); List<Region> remainingRegions = Lists.newArrayList(); findLinearMatches(formatted, toBeFormatted, mappings, remainingRegions); for (Mapping m : mappings) toBeFormatted.migrateFrom(formatted, m); return toBeFormatted.toString(); }