0

私は次のような文字列を持っています:

AB524D000000000000231200000001D0000000000000000524

ストリングの長さは 50 です。上のストリングは 1 つです。このタイプの文字列の長さは 250 です。5 つの文字列の例:

AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524.

今、私の要件は、に変更Dする必要があることCです。

次のコードを使用して、1 つの文字列を置き換えました。

String code = key.substring(0, 2);
String currency = key.substring(2, 5);
String type = key.substring(5, 6);
String amount = key.substring(6, 22);
String rate = key.substring(22, 30);
String type2 = key.substring(30, 31);
String rAmount = key.substring(31, 47);
String currency2 = key.substring(47, 50);


String finalReq = code + currency + "C" + amount + rate + "C" + rAmount + currency2;

次の出力が得られました。

AB524C000000000000231200000001C0000000000000000524

これは 1 つのストリング、つまり 50 の長さのストリングに適しています。ただし、文字列の長さは 0 ~ 250 (文字列 1 ~ 5) ですが、パターンは次のように同じです: AB524D000000000000231200000001D000000000000000524 .

私の要件を満たすのに最適なロジックはどれですか?

注:string.replaceAll('D','C')私の0番目と最初のインデックスには文字があるため、できません。つまり、 Dもある可能性があります。

4

3 に答える 3

1

私はそれを言うだろう

replaceAll("\\G(.{5})D(.{24})D(.{19})", "$1C$2C$3")

トリックを行う必要がありますが、文字列に説明した形式のデータのみが含まれているのか、Dそれともある場所にある可能性のある文字のみを置き換えたいのか、または任意の文字を置き換えたいのかはわかりませんD


replaceAll正規表現を最初のパラメーターとして使用し、その正規表現の結果を使用できる文字列を2番目のパラメーターとして使用します。正規表現で

  • .ドットは改行を除く任意の文字を表します
  • .{x}またはのxような長さの一連の文字を表し.{3}ますAbZ1X9
  • 括弧内の正規表現(...)はグループを作成し、各グループには一意の番号があります。replacementこの番号は、後で文字列などで使用できます$x。 where xis number of group
  • したがって(.{5})D(.{24})D(.{19})、任意の 5 文字に一致し (そしてそれらをグループ 1 に保存)、D次に 24 文字に一致し (そしてそれらをグループ 2 に保存します) D、最後に任意の 19 文字に一致します (そしてそれらをグループ 3 に保存します)
  • 代わり"$1C$2C$3"に、最初のグループで一致した文字列を使用し、次に配置する代わりにDグループC2 からの一致を含め、次に再度D配置する代わりに、一致の最後の部分を含めます (グループ 3 に格納されCた 2 番目の後の最後の 19 文字D)
  • また、追加する文字列の先頭から 50 文字ごとにのみ一致を実行できることを確認します。これは、文字列の\\G先頭または以前の一致を表します (したがって、前の一致と現在の一致の間に文字が存在することはできません)。
于 2013-10-07T17:53:16.067 に答える