2017-12-01 8 views
-1

皆さん!特殊文字を動的コンテンツに置き換えてください。

特殊文字で構成される文字列を置き換えるのが難しいです。

だから私は、例えば、以下の文字列を持っている:

各位* | CUSTOMER_NAME | ORDER_ID | | * *、

は*ご注文をお願い致します。 DELIVERY_DATE | | *私が望む何

が値を持つこれらの動的変数を交換することであるためにする

は、配信*ご期待ください。

私はこのコードのスニペットをやったが、それは正しくそれらを置き換えるものではありません:

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 + "|\\*"; 
} 

は、これは私が取得ouputを次のとおりです。

親愛なるユーザー|ユーザー|ユーザー、

ご注文ありがとうございます1236 | 1236 | 1236

配信2017年5月12日を期待してください| 2017年5月12日| 2017年5月12日

私が間違ってやっている任意のアイデア?

* EDIT * 問題が見つかりました。パイプキャラクター(|)も逃げなければなりません。

+1

'|'ですエスケープする必要のあるメタキャラクター。タイプミスとしてクローズする投票。 – dasblinkenlight

答えて

1

ホイールを再作成するのではなく、テンプレートエンジンを使用することをお勧めします。

テンプレートエンジンを使用すると、テンプレートとデータに基づいてドキュメントを生成できます。

ドキュメントを生成するために使用することができますどのようないくつかの優れたJavaフレームワークは、私はあなたが以下の2つのチェックすることをお勧め、あります

  • Apache Velocity:使いやすい、良いドキュメントやコミュニティ
  • Jasper Reportsがあります:あなたをこのツールでTXT、PDF、DOC、EXCEL、HTMLなどのドキュメントを生成することができます。これは非常に優れたテンプレートエディタアプリケーションを備えています。

EDIT

あなたが本当にあなた自身のテンプレートエンジンを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 | \ *の形式で動的変数を使用する必要があります。これは、動的コンテンツを生成するためにマンドリルがサポートするものです。 プログラムでSMSテキストを生成するために同じ形式を使用したいので、類似のコンテンツを生成するための2つの異なるアプローチはありません。 あなたの提案は私の人生をはるかに簡単にしますが、残念ながら私はそれを使用することはできません。 – Igor

関連する問題