2011-06-02 18 views

Respuesta

5

Puede dar Velocity o Freemarker una oportunidad. He usado ambos en motores de plantillas de correo electrónico. Proporcionan una sintaxis simple para casos de uso básicos, ¡pero puede volverse bastante complejo más adelante!

De los dos, yo personalmente prefiero Freemarker porque han hecho un buen trabajo al proporcionar todo tipo de builtins diferentes que hacen que el formateo de números y texto sea muy simple.

1

Trate Apache Velocity o FreeMarker, que pueden ser de utilidad, para mí que estoy utilizando FreeMarker

0

acuerdo, la velocidad de Apache es una buena opción para situaciones incrustadas.

Si desea un producto independiente, también puede utilizar Apache's Ant. Reduce la plantilla dentro de una tarea de copia mediante la aplicación de filtros de sustitución.

10

StringTemplate es otra opción. El five-minute introduction proporciona algunos ejemplos básicos y sintaxis.

StringTemplate hello = new StringTemplate("Hello, $name$", 
              DefaultTemplateLexer.class); 
hello.setAttribute("name", "World"); 
System.out.println(hello.toString()); 
2

Es muy simple de hacerlo usted mismo:

public class Substitution { 

    public static void main(String[] args) throws Exception { 
    String a = "[email protected]@ccc"; 

    // This can be easiliy FileReader or any Reader 
    Reader sr = new StringReader(a); 

    // This can be any Writer (ie FileWriter) 
    Writer wr = new StringWriter(); 

    for (;;) { 
     int c = sr.read(); 
     if (c == -1) { //EOF 
     break; 
     } 
     if (c == '@') { 
     String var = readVariable(sr); 
     String val = getValue(var); 
     wr.append(val); 
     } 
     else { 
     wr.write(c); 
     } 
    } 
    } 

    /** 
    * This finds the value from Map, or somewhere 
    */ 
    private static String getValue(String var) { 
    return null; 
    } 

    private static String readVariable(Reader sr)throws Exception { 
    StringBuilder nameSB = new StringBuilder(); 
    for (;;) { 
     int c = sr.read(); 
     if (c == -1) { 
     throw new IllegalStateException("premature EOF."); 
     } 
     if (c == '@') { 
     break; 
     } 
     nameSB.append((char)c); 
    } 
    return nameSB.toString(); 
    } 
} 

Tienes que pulirlo un poco, pero eso es todo.