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

System.out.println(srep);

だから私のコードElep_ntは出力しますが、その部分文字列の個々のインデックスをアンダースコアに置き換えてElep__nt 、1行でこれを実行する方法はありますか? ループを使用する必要がありますか?

4

4 に答える 4

4

あなたの問題は"ha"、一度に一致しているため、1文字だけに置き換えられることです。("Elephantha"最後の"ha"ものも交換されることに注意してください。)

後読みを使用して、置換する各文字を決定できます。したがって、 「位置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);
要素__nt
于 2013-09-11T17:19:50.753 に答える
1

ここでワンライナーを要求したので、別の可能な方法があります。

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 に答える