String s = "Elephant";
String srep = (s.replaceAll(s.substring(4,6), "_" ));
System.out.println(srep);
だから私のコードElep_nt
は出力しますが、その部分文字列の個々のインデックスをアンダースコアに置き換えてElep__nt
、1行でこれを実行する方法はありますか? ループを使用する必要がありますか?
あなたの問題は"ha"
、一度に一致しているため、1文字だけに置き換えられることです。("Elephantha"
最後の"ha"
ものも交換されることに注意してください。)
後読みを使用して、置換する各文字を決定できます。したがって、 「位置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);
要素__nt
ここでワンライナーを要求したので、別の可能な方法があります。
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() ));