String s = "Elephant";
String srep = (s.replaceAll(s.substring(4,6), "_" ));
System.out.println(srep);
所以我的代码输出Elep_nt
但是我希望它用下划线替换该子字符串的每个单独的索引,以便它输出Elep__nt
无论如何都可以在一行中执行此操作?我必须使用循环吗?
你的问题是你"ha"
一次匹配,因此它只被一个字符替换。(还要注意,如果你有"Elephantha"
最后一个"ha"
也会被替换。)
您可以使用lookbehind来确定要替换的每个单个字符。因此,要“将位置4 到 5的字符替换” ,您可以使用:
String s = "Elephant";
String srep = s.replaceAll("(?<=^.{4,5}).", "_");
System.out.println(srep);
输出:
Elep__nt
您可以使用StringBuilder
:
StringBuilder result = new StringBuilder(s.length());
result.append(s.substring(0, 4));
for (int i = 4; i < 6; i++)
result.append('_');
result.append(s.substring(6));
String srep = result.toString();
System.out.println(srep);
大象
由于您在这里要求使用 oneliner,因此这是另一种可能的方式。
String srep = s.substring(0,4)+s.substring(4,6).replaceAll(".", "_")+s.substring(6);
或使用StringBuilder
String srep = new StringBuilder(s).replace(4, 6, s.substring(4,6).replaceAll(".", "_")).toString();
输出
Elep__nt
但请注意,内部正则表达式replaceAll
无论如何都使用循环
int difference = 6-4;
StringBuilder sb = new StringBuilder();
for(int count=0; count<difference; count++){
sb.append("_");
}
String s = "Elephant";
String srep = (s.replaceAll(s.substring(4,6), sbsb.toString() ));