Почему этот шаблон StringTemplates с пользовательскими разделителями не работает? - PullRequest
1 голос
/ 27 ноября 2011

Я пытаюсь использовать шаблон строки с пользовательскими разделителями.

Этот фрагмент кода:

new ST("Hello @what@", '@', '@').add("what", "world").render()

throws org.stringtemplate.v4.compiler.STException, поэтому я, очевидно, делаю это неправильно.

Если я изменю это значение на new ST("Hello $what$", '$', '$'), оно будет работать.Почему @ не работает?

Редактировать - я пробовал другие символы, кроме $ и @, и пока ничего не работает, кроме $.Что происходит?

Ответы [ 2 ]

0 голосов
/ 08 августа 2017

Символы типа '$', '<' являются специальными для StringTemplate и должны быть экранированы. </p>

Вы можете сделать утилиту побега, например:

ST st = new ST(StringUtility.escapeStringTemplate(str));

//utility function

public static String escapeStringTemplate(String str){
    String result = str;
    if (result.contains("<")) {
        result = result.replace("<", "\\<");
    }
    if (result.contains("$")) {
        result = result.replace("$", "\\$");
    }

    return result;
}
0 голосов
/ 27 ноября 2011

Я считаю, что они должны быть разными персонажами; старт / стоп. Ter

...