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")