0

文字列 (テキスト ファイルから取得) 内に次の式があります。

{gender=male#his#her}
{new=true#newer#older}

そして、私はしたいです:

  1. そのパターンの出現を見つける{variable=value#if_true#if_false}
  2. variableNameこれらの変数を、variableValueifTrueifFalseなどのフィールドに一時的に保存しますString
  3. variableNameローカル変数に基づいて、式を評価しvariableValueます (文字列の性別 = "男性" や文字列の新しい = "真" など)。
  4. ifTrue最後に、パターンを (3) で、またはifFalse(3) に従って置き換えます。

何らかの方法で使用する必要がありますString.replaceAll()か、またはこの式を探して内部の文字列を保存するにはどうすればよいですか? ご協力いただきありがとうございます

アップデート

PHP のpreg_match_allのようなものになります。

更新 2

以下の回答として投稿したように、Patternandを使用してこれを解決しました。Matcher

4

2 に答える 2

0

しばらく苦労した後、次のようPatternに andMatcherを使用してこれを機能させることができました:

// \{variable=value#if_true#if_false\}
Pattern pattern = Pattern.compile(Pattern.quote("\\{") + "([\\w\\s]+)=([\\w\\s]+)#([\\w\\s]+)#([\\w\\s]+)" + Pattern.quote("\\}"));
Matcher matcher = pattern.matcher(doc);

// if we'll make multiple replacements we should keep an offset
int offset = 0;

// perform the search
while (matcher.find()) {
    // by default, replacement is the same expression
    String replacement = matcher.group(0);
    String field = matcher.group(1);
    String value = matcher.group(2);
    String ifTrue = matcher.group(3);
    String ifFalse = matcher.group(4);

    // verify if field is gender
    if (field.equalsIgnoreCase("Gender")) {
        replacement = value.equalsIgnoreCase("Female")?ifTrue:ifFalse;
    }

    // replace the string
    doc = doc.substring(0, matcher.start() + offset) + replacement + doc.substring(matcher.end() + offset);

    // adjust the offset
    offset += replacement.length() - matcher.group(0).length();
}
于 2013-04-15T22:23:14.283 に答える