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

System.out.println(srep);

所以我的代码输出Elep_nt但是我希望它用下划线替换该子字符串的每个单独的索引,以便它输出Elep__nt 无论如何都可以在一行中执行此操作?我必须使用循环吗?

4

4 回答 4

4

你的问题是你"ha"一次匹配,因此它只被一个字符替换。(还要注意,如果你有"Elephantha"最后一个"ha"也会被替换。)

您可以使用lookbehind来确定要替换的每个单个字符。因此,要“将位置4 到 5的字符替换” ,您可以使用:

String s = "Elephant";
String srep = s.replaceAll("(?<=^.{4,5}).", "_");

System.out.println(srep);

输出:

Elep__nt
于 2013-09-11T17:22:01.667 回答
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);
大象
于 2013-09-11T17:19:50.753 回答
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无论如何都使用循环

于 2013-09-11T17:30:25.090 回答
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() ));
于 2013-09-11T17:21:41.947 回答