2

基本的に、Javaの文字列の<>または{}ブロック内のデータを取得する必要があります。

文字列には、<>または{}タグが含まれる場合と含まれない場合があります。

文字列には、複数の<>または{}ブロックが含まれる場合があります。

<>および{}ブロック内のデータは、基本的に変数または関数名です。

    d1 = "1234";
    d2 = "5678";
    sampleString = "aaa<d1>aaa{d1}aaa<d2>aaa";

結果はこのようなものである必要があります。

    resultString = "aaa1234aaa4321aaa5678aaa";

前もって感謝します。:)

編集

<>ブロックと{}ブロック内の値は動的であることに注意してください。

ができた

    sampleString = "aaa<d5>aaa{d1}aaa<d2>aaa";

これは、プロパティ/変数/パラメータなどから値d5を取得することを意味します。

私は最初からそれを述べるべきでした。:p

4

5 に答える 5

2

これは、JavaのPatternandMatcherで解決できる古典的な正規表現タスクです。まず、Javaの実装に関係なく、この文字列をキャプチャするために必要な正規表現について考えてください。ある種の何かが"(?:.*<(.*?)>.*)|(?:.*{(.*?)}.*)"文字列をキャプチャするのに役立つはずです。Matcherを使用して一致を作成し、whileループで実行できます。Matcherの.find()メソッドはNULLを返しません(つまり、文字列に一致が残っています)。ループで、必要なグループを置き換えます。

于 2012-07-04T06:25:25.063 に答える
1

まず、Map値の を作成します。

Map<String, String> values = new HashMap<String, String>();
values.put("d1", "1234");
values.put("d2", "5678");

次に、すべての一致を見つけて置き換えます。

Matcher matcher = Pattern.compile("<(.*?)>").matcher(text);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, values.get(matcher.group(1)));
}
matcher.appendTail(sb);

そして再び他のパターンのために:

matcher = Pattern.compile("\\{(.*?)\\}").matcher(sb.toString());
sb = new StringBuffer();
while (matcher.find()) {
      matcher.appendReplacement(sb, new StringBuffer(values.get(matcher.group(1))).reverse().toString());
}
matcher.appendTail(sb);
于 2012-07-04T06:34:31.800 に答える
1
    String d1 = "1234";
    String d2 = "5678";
    String sampleString = "aaa<d1>aaa{d1}aaa<d2>aaa";
    String finalStirng= sampleString.replaceAll("<d1>", d1).replaceAll("\\{d1\\}", d1).replaceAll("<d2>", d2).replaceAll("\\{d2\\}", d2);
    System.out.println("finalStirng= " + finalStirng);

{ と } は、Java の正規表現方言では特別です。したがって、それらをエスケープする必要があります: as "\\{d1\\}".

于 2012-07-04T06:29:00.057 に答える
0

これを試してみてください

sampleString = sampleString.replaceAll("<d1>",d1).replaceAll("{d1}",new StringBuffer(d1).reverse().toString()).replaceAll("<d2>",d2);
于 2012-07-04T06:22:05.420 に答える
0

直接的なアプローチは、前述のように正規表現を使用することです

String resultString = "";  
resultString = sampleString.replaceAll("<d1>",d1);  
resultString = resultString.replaceAll("\\{d1\\}",d1);  
resultString = resultString.replaceAll("<d2>",d2);  

これは、説明した特定のシナリオでは (テストされていませんが) 機能しますが、<> または {} タグ間の文字が正規表現に影響を与える可能性があるため、一般的なシナリオでは機能しないことに注意してください。<> または {} タグの間に何があるかによって異なります。

<.*> のようなものを正規表現条件として使用することを考えたほうがよいかもしれません...

于 2012-07-04T06:31:51.153 に答える