Java 如何替换子字符串的每个标记

Java 如何替换子字符串的每个标记,java,regex,replace,Java,Regex,Replace,因此,我的代码输出Elep\u nt,但我希望它用下划线替换该子字符串的每个单独标记,以便它将输出Elep\u nt 在一行中是否有这样做的方法?我必须使用循环吗?您可以使用StringBuilder: String s = "Elephant"; String srep = (s.replaceAll(s.substring(4,6), "_" )); System.out.println(srep); StringBuilder结果=新的StringBuilder(s.length())

因此,我的代码输出
Elep\u nt
,但我希望它用下划线替换该子字符串的每个单独标记,以便它将输出
Elep\u nt

在一行中是否有这样做的方法?我必须使用循环吗?

您可以使用
StringBuilder

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

System.out.println(srep);
StringBuilder结果=新的StringBuilder(s.length());
追加(s.substring(0,4));
对于(int i=4;i<6;i++)
结果。追加(“”);
结果:追加(s.substring(6));
字符串srep=result.toString();
系统输出打印LN(srep);
电气设备
您可以使用
StringBuilder

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

System.out.println(srep);
StringBuilder结果=新的StringBuilder(s.length());
追加(s.substring(0,4));
对于(int i=4;i<6;i++)
结果。追加(“”);
结果:追加(s.substring(6));
字符串srep=result.toString();
系统输出打印LN(srep);
电气设备
int差=6-4;
StringBuilder sb=新的StringBuilder();
对于(整数计数=0;计数<代码>整数差=6-4;
StringBuilder sb=新的StringBuilder();

对于(int count=0;count而言,您的问题在于您同时匹配了
“ha”
,因此它只被一个字符替换。(请注意,如果您有
“Elephantha”
,最后一个
“ha”
也将被替换。)

您可以使用a来确定要替换的每个字符。因此,要将字符从位置4替换为位置5,您可以使用:

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

您的问题是,您同时匹配了
“ha”
,因此它只被一个字符替换。(请注意,如果您有
“Elephantha”
,最后一个
“ha”
也会被替换。)

您可以使用a来确定要替换的每个字符。因此,要将字符从位置4替换为位置5,您可以使用:

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

既然你要的是oneliner,这里是另一种可能的方式

Elep__nt
或使用
StringBuilder

String srep = s.substring(0,4)+s.substring(4,6).replaceAll(".", "_")+s.substring(6);
输出

String srep = new StringBuilder(s).replace(4, 6, s.substring(4,6).replaceAll(".", "_")).toString();

但请注意,内部regex
replaceAll
无论如何都使用循环

,因为您在这里要求使用oneliner是另一种可能的方法

Elep__nt
或使用
StringBuilder

String srep = s.substring(0,4)+s.substring(4,6).replaceAll(".", "_")+s.substring(6);
输出

String srep = new StringBuilder(s).replace(4, 6, s.substring(4,6).replaceAll(".", "_")).toString();

但是请注意,在内部regex
replaceAll
无论如何都使用循环

您认为在一行中执行该操作会有什么好处?您认为在一行中执行该操作会有什么好处?