3

StringBuilderメソッドを使用して文字列を置き換えようとしましreplaceたが、残念ながらinsertメソッドのように実行されています。

ここにいくつかのコードがあります:

public class StringBuilderReplace {

    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder();

        builder.append("Line 1\n");
        builder.append("Line 2\n");
        builder.append("Line 3\n");

        builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 2"), "Temporary Line\n");

        System.out.println(builder.toString());
    }
}

このコードの結果:

Line 1
Temporary Line
Line 2
Line 3

私が欲しいのは:

Line 1
Temporary Line
Line 3

私が望む結果を得るためにこれを行う方法は?

AljoshaBreの回答に基づいて更新

次のようにコードを変更すると機能します。

builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 3"), "Temporary Line\n");

しかし、新しい問題が発生します。次の文字列(この例の場合Line 3)の内容がわからない場合はどうなりますか?

4

2 に答える 2

7

これは、「Line 2」のインデックスを開始インデックスとして取得しているためです。これは、その行の先頭であり、最後のインデックスに対しても同じことを行います。

次のことを行う必要があると思います。

public class StringBuilderReplace {
        public static void main(String[] args) {
            StringBuilder builder = new StringBuilder();

            builder.append("Line 1\n");
            builder.append("Line 2\n");
            builder.append("Line 3\n");

            String lineToReplace = "Line 1\n";
            int startIndex = builder.indexOf(lineToReplace);
            int lastIndex = startIndex + lineToReplace.length();

            builder.replace(startIndex, lastIndex, "Temporary Line\n");
            System.out.println(builder.toString());
        }
}
于 2012-05-24T10:49:12.350 に答える
2
final String toReplace = "Line 2\n";
final int start = builder.indexOf(toReplace);
builder.replace(start, start+toReplace.length(), "Temporary Line\n");
于 2012-05-24T10:54:27.027 に答える