String s = "Elephant";
String srep = (s.replaceAll(s.substring(4,6), "_" ));
System.out.println(srep);
所以我的代码输出Elep_nt
但我希望它用下划线替换该子串的每个单独的indice,以便它输出Elep__nt
无论如何要在一条线上做到这一点?我必须使用循环吗?
答案 0 :(得分:4)
你的问题是你一次匹配"ha"
,因此它只被一个char替换。 (另请注意,如果您有"Elephantha"
,则最后"ha"
也将被替换。)
您可以使用lookbehind来确定要替换的每个字符。所以要“替换位置 4到5 ”中的字符,你可以使用:
String s = "Elephant";
String srep = s.replaceAll("(?<=^.{4,5}).", "_");
System.out.println(srep);
输出:
Elep__nt
答案 1 :(得分:2)
您可以使用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);
Elep__nt
答案 2 :(得分:1)
因为你在这里要求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
仍然使用循环
答案 3 :(得分:0)
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() ));