如何替换子串的每个指标

时间:2013-09-11 17:17:07

标签: java regex replace

String s = "Elephant";
String srep = (s.replaceAll(s.substring(4,6), "_" ));

System.out.println(srep);

所以我的代码输出Elep_nt但我希望它用下划线替换该子串的每个单独的indice,以便它输出Elep__nt 无论如何要在一条线上做到这一点?我必须使用循环吗?

4 个答案:

答案 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() ));