복붙노트

[SPRING] 동적 템플릿 문자열을 만드는 방법

SPRING

동적 템플릿 문자열을 만드는 방법

템플릿 문자열을 Spring 또는 java를 사용하는 값과 함께 대체하는 API가 있습니까?

예 :

Dear %FIRST_NAME% %LAST_NAME%,
---- remaining text-----------

여기서 매개 변수 (FIRST_NAME, LAST_NAME)는 Map 형식입니다.

해결법

  1. ==============================

    1.제가 선호하는 템플릿 엔진은 Apache Velocity입니다.

    제가 선호하는 템플릿 엔진은 Apache Velocity입니다.

    Spring과 잘 통합되어 있으며, 소개 글은 여기에있다.

  2. ==============================

    2.이렇게하는 코드를 작성하는 것은 비교적 간단합니다. 이것이 무언가라면 많은 일을해야 할 것입니다. 그러나 Velocity와 같은 기존 라이브러리를 사용하고 싶을 수도 있습니다. 그러나 값에 대해 다른 구문을 사용합니다. 시작하기를 참조하십시오.

    이렇게하는 코드를 작성하는 것은 비교적 간단합니다. 이것이 무언가라면 많은 일을해야 할 것입니다. 그러나 Velocity와 같은 기존 라이브러리를 사용하고 싶을 수도 있습니다. 그러나 값에 대해 다른 구문을 사용합니다. 시작하기를 참조하십시오.

    직접 쓰려면 다음을 시도하십시오.

    public static String replaceAll(String text, Map<String, String> params) {
      return replaceAll(text, params, '%', '%');
    }
    
    public static String replaceAll(String text, Map<String, String> params,
        char leading, char trailing) {
      String pattern = "";
      if (leading != 0) {
        pattern += leading;
      }
      pattern += "(\\w+)";
      if (trailing != 0) {
        pattern += trailing;
      }
      Pattern p = Pattern.compile(pattern);
      Matcher m = p.matcher(text);
      boolean result = m.find();
      if (result) {
        StringBuffer sb = new StringBuffer();
        do {
          String replacement = params.get(m.group(1));
          if (replacement == null) {
            replacement = m.group();
          }
          m.appendReplacement(sb, replacement);
          result = m.find();
        } while (result);
        m.appendTail(sb);
        return sb.toString();
      }
      return text;
    }
    

    예 :

    String in = "Hi %FIRST_NAME% %LAST_NAME%.";
    Map<String, String> params = new HashMap<String, String>();
    params.put("FIRST_NAME", "John");
    params.put("LAST_NAME", "Smith");
    String out = replaceAll(in, params);
    System.out.println(out);
    

    산출:

    Hi John Smith.
    
  3. ==============================

    3.여기에서 StringTemplate, http://www.stringtemplate.org/ 및 기사를 확인하려면 http://www.codecapers.com/post/Generating-Structured-Text-with-StringTemplate.aspx를 참조하십시오.

    여기에서 StringTemplate, http://www.stringtemplate.org/ 및 기사를 확인하려면 http://www.codecapers.com/post/Generating-Structured-Text-with-StringTemplate.aspx를 참조하십시오.

  4. ==============================

    4.용법:

    용법:

    replaceAll(string,
            "param1", "value 1",
            "param12", "value 12");
    

    이행:

    public static String replaceAll(String text, Object... replacements) {
        Assert.isTrue(replacements.length % 2 == 0, "Is not key - value pairs: " + replacements);
    
        Map< String, String> longToShortNamesMap = new TreeMap<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() == o2.length() ? o1.compareTo(o2) : o2.length() - o1.length();
            }
        });
        for (int i = 0; i < replacements.length; i += 2) {
            longToShortNamesMap.put(Objects.toString(replacements[i]), Objects.toString(replacements[i+1]));
        }
        String result = text;
        for (String key : longToShortNamesMap.keySet()) {
            Assert.isTrue(text.contains(key), "Can not find key in the text " + key);
            result = result.replaceAll(key, longToShortNamesMap.get(key));
        }
        return result;
    }
    
  5. from https://stackoverflow.com/questions/2368802/how-to-create-dynamic-template-string by cc-by-sa and MIT license