2017-12-01 21 views
-1

Heys guys!특수 문자를 동적 내용으로 바꿉니다.

특수 문자로 구성된 문자열을 대체하는 데 어려움이 있습니다. CUSTOMER_NAME | | *,

이 * 주문 감사 | ORDER_ID | *

친애 * :

은 그래서 예를 들어 다음과 같은 문자열을 가지고있다. DELIVERY_DATE | | * 내가 좋아하는 것이 무엇

값으로 그 동적 변수를 대체하는 것입니다 할 수

배달 *를 기대하십시오.

나는이 코드 조각을 한 적이 있지만 올바르게 대체하지 않습니다 :이 OUPUT 내가 얻을 수있다

Map<String, String> structMap = getContectMap(); 
    for (String key : structMap.keySet()) { 
     if (bodyText.contains(key)) { 
      bodyText.replaceAll(getVariableKey(key), structMap.get(key)); 
     } 
    } 

private String getVariableKey(Object key) { 
    return "\\*|" + key + "|\\*"; 
} 

:

친애하는 사용자 | 사용자 | 사용자,

주문 해 주셔서 감사합니다. 1236 | 1236 | 1236

기대주세요 배달 2017년 5월 12일 | 2017년 5월 12일 | 내가 잘못 뭘하는지 2017년 5월 12일

어떤 아이디어?

* EDIT * 발견. 나는 파이프 문자 (|)도 벗어나야한다. 이제 작동한다.

+1

'|의'이다 메타 문자를 이스케이프해야합니다. 오타로 닫는 투표. – dasblinkenlight

답변

1

바퀴를 재발 명하려는 대신 템플릿 엔진을 사용하는 것이 좋습니다.

템플릿 엔진을 사용하면 템플릿과 데이터를 기반으로 문서를 생성 할 수 있습니다.

당신이 문서를 생성하는 데 사용할 수있는 몇 가지 좋은 자바 프레임 워크는 당신이 다음과 같은 두 가지 확인하는 것이 좋습니다있다 :

  • Apache Velocity : 사용하기 쉽고, 좋은 문서 및 지역 사회
  • Jasper Reports을 가지고 : 당신을 이 도구로 TXT, PDF, DOC, 엑셀, HTML 등의 문서를 생성 할 수 있으며 아주 좋은 템플릿 편집기 응용 프로그램을 가지고 있습니다.

편집

당신이 정말로 다음이 해결책이 될 수 있습니다 자신의 템플릿 엔진을 wtite하려면 다음

public static void main(String[] args) { 
    String template = "Dear CUSTOMER_NAME, \n\n" 
      + "Thank you for your order ID is ORDER_ID.\n" 
      + "Please expect delivery DELIVERY_DATE."; 


    Date deliveryDate = new Date(); 
    String deliveryDateString = new SimpleDateFormat("dd/MM/yyyy").format(deliveryDate); 


    Map<String, String> keywords = new HashMap<>(); 
    keywords.put("CUSTOMER_NAME", "Zappee"); 
    keywords.put("ORDER_ID", "123456"); 
    keywords.put("DELIVERY_DATE", deliveryDateString); 

    for (Map.Entry<String, String> keyword : keywords.entrySet()) { 
     template = template.replaceAll(keyword.getKey(), keyword.getValue()); 
    } 

    System.out.println(template); 
} 

출력 :

Dear Zappee, 

Thank you for your order ID is 123456. 
Please expect delivery 01/12/2017. 
+0

제안 해 주셔서 감사합니다. 나는 템플릿 엔진을 사용 하겠지만 문제는 우리가 동일한 변수 이름과 형식을 다른 나가는 채널에서 사용하려고한다는 것입니다. 이 \ * | var_name | \ * 형식은 Mailchimp/Mandrill에서 사용하며 우리는 SMS 전송에도이 형식을 사용하고자합니다. 사용자가 서로 다른 부분의 프로그램에서 동일한 형식을 사용하면 자신의 동적 콘텐츠를 쉽게 설정할 수 있습니다. – Igor

+0

내 게시물을 업데이트했습니다. 그것을 확인하십시오. – zappee

+0

답변 해 주셔서 감사합니다. 나는 네가 의미하는 것을 본다. 그러나 그것은 여전히 ​​나의 상황을 해결하지 못한다. 고객이 Mandrill 전자 메일 템플릿을 만들 때 다음 형식의 동적 변수를 사용해야합니다 : \ * | variable | \ *. 이것이 동적 컨텐츠 생성을 위해 Mandrill에서 지원하는 것입니다. 우리 프로그램에서 SMS 텍스트를 생성하는 데 동일한 형식을 사용하기를 원하기 때문에 비슷한 내용을 생성하는 두 가지 접근 방식이 없습니다. 당신의 제안은 내 인생을 훨씬 쉽게 만들어 줄 것이지만, 불행히도 그것을 사용할 수는 없습니다. – Igor