2

「[開始日+30]までプロモーションを使用できます」のような文字列があります。プレースホルダーを実際の日付に置き換える必要があり[ Start Date + 30]ます。これは、販売の開始日に30日(またはその他の数値)を加えたものです。[Start Date]番号を追加せずに単独で表示される場合もあります。また、プレースホルダー内の余分な空白は無視して、置換に失敗しないようにする必要があります。

Javaでそれを行うための最良の方法は何でしょうか?プレースホルダーを見つけるための正規表現を考えていますが、解析部分の実行方法がわかりません。[開始日]だけの場合はString.replaceAll()メソッドを使用しますが、式を解析して日数を加算する必要があるため、使用できません。

4

1 に答える 1

3

StringBufferとを使用する必要がありMatcher.appendReplacementますMatcher.appendTail

完全な例を次に示します。

String msg = "Hello [Start Date + 30] world [ Start Date ].";
StringBuffer sb = new StringBuffer();

Matcher m = Pattern.compile("\\[(.*?)\\]").matcher(msg);

while (m.find()) {

    // What to replace
    String toReplace = m.group(1);

    // New value to insert
    int toInsert = 1000;

    // Parse toReplace (you probably want to do something better :)
    String[] parts = toReplace.split("\\+");
    if (parts.length > 1)
        toInsert += Integer.parseInt(parts[1].trim());

    // Append replaced match.
    m.appendReplacement(sb, "" + toInsert);
}
m.appendTail(sb);

System.out.println(sb);

出力:

Hello 1030 world 1000.
于 2012-05-02T11:01:30.847 に答える