content: package rabbitescape.engine.util;
  
  import java.util.Map;
  import java.util.regex.Matcher;
  
  public class NamedFieldFormatter
  {
      /**
       * Format a string containing named substitution parameters by substituting
       * in values from params.
       *
       * For example:
       *
       * Map<String, Object> params = new HashMap<String, Object>();
       * params.put( "thing", "life" );
       * params.put( "answer", 42 );
       * String x = format( "The meaning of ${thing} is ${answer}.", params );
       * System.out.println( x );
       *
       * Will print "The meaning of life is 42."
       *
       * @param format the format string containing parameters surrounded by ${}
       * @param params a map of parameter names to their values
       * @return the format string with parameters substituted wherever their
       *         names (surrounded by ${}) are found.
       */
      public static String format( String format, Map<String, Object> params )
      {
          String ans = format;
  
          for ( Map.Entry<String, Object> param : params.entrySet() )
          {
              ans = ans.replaceAll(
                  "\\$\\{" + param.getKey() + "\\}",
                  Matcher.quoteReplacement( String.valueOf( param.getValue() ) )
              );
          }
  
          return ans;
      }
  
  }
  