コード例 #1
0
 @Override
 public String toString() {
   String s1 = src.substring(srcOffset, srcOffset + length);
   String s2 = dst.substring(dstOffset, dstOffset + length);
   if (s1.equals(s2)) return s1;
   return "'" + s1 + "' != '" + s2 + "'";
 }
コード例 #2
0
 protected void findLinearMatches(
     FormattedString formattedString,
     FormattedString toBeFormattedString,
     List<Mapping> mappings,
     List<Region> remainingRegions) {
   int i1 = 0;
   int i2 = 0;
   while (i1 < formattedString.length() && i2 < toBeFormattedString.length()) {
     int match = countOverlappingChars(formattedString, toBeFormattedString, i1, i2);
     if (match > 0) {
       mappings.add(new Mapping(formattedString, toBeFormattedString, i1, i2, match));
       i1 += match;
       i2 += match;
     }
     if (i1 >= formattedString.length() || i2 >= toBeFormattedString.length()) return;
     int[] next = findNextOverlappingChar(formattedString, toBeFormattedString, i1, i2);
     if (next == null) {
       remainingRegions.add(new Region(i2, toBeFormattedString.length() - i2));
       return;
     }
     remainingRegions.add(new Region(i2, next[1]));
     i1 += next[0];
     i2 += next[1];
   }
 }
コード例 #3
0
 protected int countOverlappingChars(
     FormattedString s1, FormattedString s2, int s1Offset, int s2Offset) {
   int i = 0;
   while (i + s1Offset < s1.length()
       && i + s2Offset < s2.length()
       && s1.charAt(i + s1Offset) == s2.charAt(i + s2Offset)) i++;
   return i;
 }
コード例 #4
0
 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();
 }
コード例 #5
0
 protected int[] findNextOverlappingChar(
     FormattedString s1, FormattedString s2, int s1Offset, int s2Offset) {
   final int lenght = 2;
   if (lenght + s2Offset >= s2.length()) return null;
   int[] best = null;
   int i1 = 0;
   while (i1 + lenght + s1Offset < s1.length()) {
     String cand = s1.substring(s1Offset + i1, s1Offset + i1 + lenght);
     int i2 = s2.indexOf(cand, s2Offset) - s2Offset;
     if (i2 >= 0 && (best == null || best[0] + best[1] > i1 + i2)) best = new int[] {i1, i2};
     if (best != null && best[0] + best[1] > i1) return best;
     i1++;
   }
   return best;
 }