44

string があるとします123456789。文字列のインデックス 3 ~ 5 を置き換えたいことはわかっています。(4、5、および 6)。置換はおそらく 3 文字ではないことに注意してください。最終的には123foobar789.

これを行う最善の方法は何ですか?

4

3 に答える 3

50

以下のコードを試してください。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

デモ

于 2013-02-01T09:34:07.447 に答える
35

まず、 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) とにかく簡単ではありませんが、リフレクションで実行できますが、避ける必要があります。

于 2013-02-01T09:19:04.430 に答える
13

指定された部分文字列の繰り返しがない場合は、これを試してください。

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());
于 2013-02-01T09:38:24.470 に答える