文字列の置換

文字列の置換(英: String replacement)とは、文字列の中にあるある部分文字列を別の文字列に置き換えることを指します。

文字列の置換は、多くのプログラムで使用される一般的な操作の1つであり、文字列の加工や変換に役立ちます。

例えば、電子メールの本文中に含まれる"Dear"を"Hi"に置換する、またはファイル名の拡張子を変更する場合に使用することができます。JavaやPythonなどの多くのプログラミング言語には、文字列の置換を行うための組み込み関数やメソッドがあります。

例えば、Javaでは以下のようなメソッドが標準APIに含まれています。

replace(CharSequence target, CharSequence replacement):

文字列内の指定された部分文字列を、指定された新しい部分文字列に置換します。

String str = "apple";
str = str.replace('p', 'b'); // str = "abble"

以下のサンプルプログラムではreplace(CharSequence target, CharSequence replacement)を模した動作をします。

<サンプルプログラム>

public class StringReplacement {

    public static void main(String[] args) {

        // 元の文字列
        String originalString = "Hi there, hello world! Hello Hello.";

        // 置換対象の文字列
        String searchString = "Hello";

        // 置換する文字列
        String replaceString = "Goodby";

        // 置換後の文字列
        String newString = replaceString(originalString, searchString, replaceString);

        // 置換後の文字列を出力
        System.out.println(newString);
    }

    public static String replaceString(String originalString, String searchString, String replaceString) {

        // 文字列をchar型の配列に変換
        char[] originalChars = originalString.toCharArray();
        char[] searchChars = searchString.toCharArray();
        char[] replaceChars = replaceString.toCharArray();

        // 置換後の文字列を構築するためのStringBuilderオブジェクト
        StringBuilder newString = new StringBuilder();

        // 置換対象文字列と置換する文字列の長さ
        int searchLength = searchChars.length;

        // 元の文字列の長さ
        int originalLength = originalChars.length;

        // 置換対象文字列を検索するためのインデックス
        int i = 0;

        while (i < originalLength) {
            boolean foundMatch = true;
            for (int j = 0; j < searchLength; j++) {
                // 置換対象文字列と元の文字列を比較し、一致しない場合はfoundMatchをfalseに設定
                if (originalChars[i + j] != searchChars[j]) {
                    foundMatch = false;
                    break;
                }
            }

            // 置換対象文字列が見つかった場合は、置換する文字列を新しい文字列に追加してインデックスを更新
            if (foundMatch) {
                newString.append(replaceChars);
                i += searchLength;
            } else {
                // 置換対象文字列が見つからない場合は、元の文字列の文字を新しい文字列に追加してインデックスを更新
                newString.append(originalChars[i]);
                i++;
            }
        }

        // 置換後の文字列を返す
        return newString.toString();
    }
}

<出力結果>

Hi there, hello world! Goodby Goodby.