Простой java lib для шаблонов текста?

Мне нужно создать несколько электронных текстов. Ничего необычного, просто замените что-то вроде @[email protected] на реальное значение. Нет изображений, нет форматирования и т.д.

Какой java lib вы могли бы порекомендовать? Чем проще, тем лучше.

Ответ 1

Вы можете дать Velocity или Freemarker выстрел. Я использовал оба в моделях шаблонов электронной почты. Они обеспечивают простой синтаксис для основных случаев использования, но вы можете получить довольно сложный позже!

Из этих двух я лично предпочитаю Freemarker, потому что они сделали очень хорошую работу по предоставлению всех видов встроенных функций, которые очень упрощают форматирование чисел и текста.

Ответ 2

Альтернатива библиотекам, уже предложенная библиотекой: java.text.MessageFormat.

Ответ 3

StringTemplate - еще один вариант. пятиминутное введение дает некоторые базовые примеры и синтаксис.

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

Ответ 5

Попробуйте Apache Velocity или FreeMarker, они могут быть полезны, для меня я использую FreeMarker

Ответ 6

Очень просто сделать это самостоятельно:

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();
  }
}

Вам нужно немного отполировать его, но все.

Ответ 7

Согласовано, скорость Apache - хороший вызов для встроенных ситуаций.

Если вы хотите автономный продукт, вы также можете использовать Apache Ant. Он уменьшает шаблон в задаче копирования, применяя фильтры подстановки.