string があるとします123456789
。文字列のインデックス 3 ~ 5 を置き換えたいことはわかっています。(4、5、および 6)。置換はおそらく 3 文字ではないことに注意してください。最終的には123foobar789
.
これを行う最善の方法は何ですか?
以下のコードを試してください。StringBufferの助けを借りて、置換を行います。StringBufferはJavaドキュメントを置き換えます
public static void main(String[] args) {
StringBuffer buf = new StringBuffer("123456789");
int start = 3;
int end = 6;
buf.replace(start, end, "foobar");
System.out.println(buf);
}
}
上記のプログラムを実行した後、以下が出力されます。
123foobar789
まず、 aString
は Java では不変であるため、それを行うことはできません。
ただし、次のメソッドを使用して、目的の値を持つ新しい String オブジェクトを作成できますString#substring()
(たとえば)。
String s = "123456789";
String newString = s.substring(0, 3) + "foobar" + s.substring(3+3);
System.out.println(newString);
効率的に実現したい場合は、連結およびsubstring()
メソッドで使用される中間文字列を作成することを避けることができます。
String s = "123456789";
StringBuilder sb = new StringBuilder();
char[] buff = s.toCharArray();
sb.append(buff , 0, 3).append("foobar");
sb.append(buff,3+3,buff.length -(3+3));
System.out.println(sb.toString());
ただし、非常にタイトなループで実行されていない場合は、おそらく無視して、最初のより読みやすいソリューションに固執する必要があります。
(1) とにかく簡単ではありませんが、リフレクションで実行できますが、避ける必要があります。
指定された部分文字列の繰り返しがない場合は、これを試してください。
String s ="123456789";
s = s.replace(s.substring(3,6), "foobar");
指定された部分文字列の繰り返しがある場合は、これを試してください。
String s ="123123123";
s= s.substring(0,3) + "foobar" + s.substring(6,s.length());