package org.psjava.judgesubmit; import java.util.HashMap; import java.util.Map; import java.util.Set; public class WordReplacer { public static String getReplaced(String original, Set<String> words) { Map<String, String> matchMap = constructMatchingMap(original, words); return getReplacedByMap(original, matchMap); } private static Map<String, String> constructMatchingMap(String original, Set<String> words) { Map<String, String> matchMap = new HashMap<String, String>(); int index = 0; for (String word : words) { String candidate; while(true) { candidate = Integer.toString(index++, 10 + 26); if(Character.isLetter(candidate.charAt(0)) && !original.contains(candidate)) break; } matchMap.put(word, candidate); } return matchMap; } private static String getReplacedByMap(String original, Map<String, String> matchMap) { StringBuilder out = new StringBuilder(); String word = ""; for (int i = 0; i < original.length(); i++) { char c = original.charAt(i); if (Character.isLetter(c) || Character.isDigit(c)) { word += c; } else { outputReplacedWordIfPossible(word, out, matchMap); word = ""; out.append(c); } } outputReplacedWordIfPossible(word, out, matchMap); return out.toString(); } private static void outputReplacedWordIfPossible(String w, StringBuilder out, Map<String, String> matchMap) { if (w.length() > 0) { String v = matchMap.get(w); if (v == null) out.append(w); else out.append(v); } } }