package comeon.core.extmetadata; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class KeyTransformer { private final Pattern regex; private static final Pattern SUBSTITUTION_PATTERN = Pattern.compile("\\$\\{(\\d+)\\}"); private final String substitution; public KeyTransformer(final String regexp, final String substitution) { this.regex = Pattern.compile(regexp); this.substitution = substitution; } public String transform(final String input) { final Matcher substitutionMatcher = SUBSTITUTION_PATTERN.matcher(substitution); final Matcher m = regex.matcher(input); final String transformed; if (m.matches()) { final StringBuffer transforming = new StringBuffer(); while (substitutionMatcher.find()) { final int groupReference = Integer.valueOf(substitutionMatcher.group(1)); final String groupValue = m.group(groupReference); substitutionMatcher.appendReplacement(transforming, groupValue); } substitutionMatcher.appendTail(transforming); transformed = transforming.toString(); } else { transformed = input; } return transformed; } }