替换多个索引中的字符

时间:2013-10-07 17:27:02

标签: java string replace

我有一个字符串,如:

AB524D000000000000231200000001D0000000000000000524

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

AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524.

现在我的要求是我需要将D更改为C

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

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

3 个答案:

答案 0 :(得分:1)

我会说那个

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

应该做的但我不知道你的字符串是否只包含你描述的格式的数据,或者你是否只想替换DD所在地的任何字符是


replaceAll使用正则表达式作为第一个参数,使用该正则表达式结果作为第二个参数的String。在正则表达式

  • .点代表除新行
  • 之外的任何字符
  • .{x}表示长度为x的任何字符系列,例如.{3}可以匹配AbZ1X9
  • 括号(...)内的正则表达式将创建组,每个组都有其唯一的编号。此号码可以稍后用于replacement字符串中$x其中x是组号
  • 所以(.{5})D(.{24})D(.{19})将匹配任意5个字符(并将它们存储在组1中),然后D然后24个字符(并创建存储在组2中),然后D,最后任意19个字符(并将它们存储在第3组中)
  • 替换"$1C$2C$3"我将使用在第一组中匹配的字符串,然后D代替C将包含来自第2组的匹配,然后再包含{{1} 1}}将放置D,之后包括匹配的最后部分(第3组中存储的第二个C之后的最后19个字符)
  • 同时保证匹配只能从字符串的开头每隔50个字符进行我将添加D表示字符串的开头或之前的匹配(因此上一个匹配和当前匹配之间不能有任何字符)

答案 1 :(得分:0)

只需使用java的String replace方法。

String old = "AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524";
String output = old.replace('D', 'C');

答案 2 :(得分: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 ...

}