Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换多索引中的字符_Java_String_Replace - Fatal编程技术网

Java 替换多索引中的字符

Java 替换多索引中的字符,java,string,replace,Java,String,Replace,我有一个字符串像: AB524D000000000000231200000001D0000000000000000524 绳子的长度是50。上面的字符串是一个。此类字符串的长度可能为250,即五个字符串示例: AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000000524AB524D000000000000231200000001D0000000000000

我有一个字符串像:

AB524D000000000000231200000001D0000000000000000524
绳子的长度是50。上面的字符串是一个。此类字符串的长度可能为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')
,因为我的第0个和第一个索引有字符,我的意思是它可能也有D

只需使用java的string方法即可


如果您确定每个字符串都是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 ...

}
index=finalReq.length()%50;
对于(inti=0;i我会这么说

replaceAll("\\G(.{5})D(.{24})D(.{19})", "$1C$2C$3")
应该这样做,但我不知道您的字符串是否只包含您描述的格式的数据,或者您是否只想替换
D
D
所在位置的任何字符


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

  • 点表示除新行以外的任何字符
  • {x}
    表示长度为
    x
    的任何字符序列,如
    {3}
    可以匹配
    AbZ
    1X9
  • 括号内的正则表达式
    (…)
    将创建组,每个组都有其唯一的编号。该编号可稍后通过
    $x
    replacement
    字符串中使用,其中
    x
    是组的编号
  • 所以
    ({5})D({24})D({19})
    将匹配任何5个字符(并将它们存储在组1中),然后
    D
    然后是24个字符(并创建存储在组2中),然后
    D
    最后是任何19个字符(并将它们存储在组3中)
  • 在替换中,
    “$1C$2C$3”
    我将使用在第一组中匹配的字符串,然后代替
    D
    放入
    C
    ,然后包括第2组中的匹配,然后代替
    D
    再次放入
    C
    ,然后包括匹配的最后一部分(第二个
    D
    后的最后19个字符存储在第3组中)
  • 另外,请确保仅从字符串开始的每50个字符进行匹配,我将添加
    \\G
    表示字符串的开始或以前的匹配(因此以前的匹配和当前匹配之间不能有任何字符)

只需使用
String#replace(char,char)
。它将用第二个字符替换第一个字符的所有大小写。如果有特殊情况,也可以使用
String#replaceAll(String,String)
,您可以使用正则表达式来完成。在
replace()之前,您已经到达了
substring()
方法
?@RohitJain Rohit-jee我没听懂你的意思。@KalathokiL.我的意思是你应该使用
replace()
方法。我确信每个字符串都是50长度先生,我的一个字符串有5倍的长度,我想把
D
替换为
C
只替换第一个字符串的索引5和30。如果字符串有100长度,我的意思是(有两个字符串)我还需要替换第二个字符串的相同索引,以此类推。我的字符串不会超过五个。@KalathokiL。好的,那么我的更新答案应该可以满足您的要求,假设它只用于您描述的字符串。代码工作了,但我有一个问题,如果您不介意,您能解释代码或任何链接吗provide@KalathokiL.我补充说解释但是很难用几句话来解释正则表达式,所以]是一个非常好的教程,可以更详细地解释正则表达式是如何工作的。
replaceAll("\\G(.{5})D(.{24})D(.{19})", "$1C$2C$3")