0

我有一个像这样的字符串

AB524D000000000000231200000001D0000000000000000524

字符串的长度是 50。上面的字符串是 1。这种类型的字符串的长度可能为 250 即。五个字符串示例:

AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524.

现在我的要求是我需要更改DC.

我使用以下代码替换了一个字符串:

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

这对一个字符串很好,我的意思是 50 长度的字符串。但字符串长度可能是 0-250(字符串 1 到 5),但模式相同:AB524D000000000000231200000001D0000000000000000524

哪个是满足我要求的最佳逻辑?

注意:我不能这样做string.replaceAll('D','C'),因为我的第零个和第一个索引有字符我的意思是它可能也有D

4

3 回答 3

1

我会这样说

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

应该可以解决问题,但我不知道您的字符串是否仅包含您描述的格式的数据,或者您是否只想替换D或任何可以在该位置的字符D


replaceAll使用正则表达式作为第一个参数,并且可以使用该正则表达式的结果作为第二个参数的字符串。在正则表达式中

  • .点表示除换行符以外的任何字符
  • .{x}表示长度可以匹配的任何字符x系列.{3}AbZ或者1X9
  • 括号内的正则表达式(...)将创建组,并且每个组都有其唯一编号。这个数字可以在以后使用,例如在replacementString via $xwhere xis number of group
  • so(.{5})D(.{24})D(.{19})将匹配任何 5 个字符(并将它们存储在第 1 组中),然后是D24 个字符(并将它们创建存储在第 2 组中)D,最后是任何 19 个字符(并将它们存储在第 3 组中)
  • 作为替代,"$1C$2C$3"我将使用在第一组中匹配的字符串,然后将包含来自第 2 组的匹配项,然后再而不是将包含匹配项的最后D一部分(第二组存储在第 3 组中的第二个后的最后 19 个字符) )CDCD
  • 还确保匹配只能从字符串开头每 50 个字符进行一次,我将添加\\G表示字符串开头或先前匹配的字符(因此先前匹配和当前匹配之间不能有任何字符)。
于 2013-10-07T17:53:16.067 回答
0

只需使用 java 的字符串替换方法。

String old = "AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524";
String output = old.replace('D', 'C');
于 2013-10-07T17:30:18.233 回答
0

如果您确定每个字符串都是 50 个字符,那么:

     index = finalReq.length() % 50;
      for(int i = 0; i<index; i++){
        String code = key.substring(0 + 50 * i, 2 + 50 * i);
        String currency = key.substring(2 + 50 * i , 5 + 50 * i);
        ...

        replace ...

}
于 2013-10-07T17:35:21.983 回答