JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで文字列のn番目に出現する部分文字列を削除するString.prototype関数の書き方

今回は、3つの引数を受け取る String.prototype 関数を書いていきます。

  • 第1引数:検索対象となる文字列(実装では this として参照されます)
  • 第2引数:削除したい部分文字列
  • 第3引数:数値 n。文字列から削除する部分文字列の「n番目の出現」を指定します

この関数は、部分文字列の削除に成功した場合は新しい文字列を返し、それ以外のあらゆるケースでは -1 を返す必要があります。

サンプルコード

以下がその実装例です。

const str = 'jkdsttjkdsre';
const subStr = 'jk';
const num = 2;
removeStr = function(subStr, num){
    if(!this.includes(subStr)){
        return -1;
    }
    let start = 0, end = subStr.length;
    let occurences = 0;
    for(; ;end < this.length){
        if(this.substring(start, end) === subStr){
            occurences++;
        };
        if(occurences === num){
            return this.substring(0, start) + this.substring(end,this.length);
        };
        end++;
        start++;
   }
}
String.prototype.removeStr = removeStr;
console.log(str.removeStr(subStr, num));

コードの解説

この関数は、まず subStr が文字列内に一度も出現しないケースをチェックし、その場合は即座に -1 を返して処理を終了します。

次に、スライディングウィンドウ(尺取り法)のアルゴリズムを使って、文字列内に subStr が出現する回数を数えていきます。ウィンドウのサイズは subStr の長さと同じです。

処理は左端のウィンドウから開始し、ウィンドウの右端が元の文字列の末尾に到達するまでスライドを続けます。その過程で出現回数が指定した回数(n番目)に達したら、該当する出現部分を文字列から取り除き、その結果得られた新しい文字列を返します。

文字列全体を走査しても指定回数の出現が見つからなかった場合は、subStr の出現回数が足りないということなので、-1 を返して関数を終了します。

最後に、removeStr プロパティを String.prototype に追加することで、任意の文字列からメソッドとして直接呼び出せるようになります。

出力結果

コンソールには以下のように出力されます。

jkdsttdsre
  1. JavaScriptで文字列内の特定文字の最大連続出現回数を求める方法

    本記事では、JavaScriptを使って「文字列の中である1文字が連続して出現する最大回数」を求める方法を解説します。アルゴリズムの考え方から実際のコード、実行結果まで、初心者にもわかりやすく説明していきます。 問題 次のようなJavaScript関数を作成することを目標とします。 第1引数として文字列を受け取る 第2引数として1文字を受け取る その文字が文字列内で連続して出現した最長の回数を数え、返す コード例 以下がその実装コードです。 {     const arr = str.split();     

  2. C++ STLのbasic_string::c_str関数とは?使い方を解説

    C++のSTL(Standard Template Library)に含まれるbasic_stringクラスには、文字列を扱うための便利なメンバ関数が多数用意されています。その中でもc_str()は、NULL終端された文字配列へのポインタを返す重要な関数です。c_str関数とはc_str()は、C++のSTLライブラリに組み込まれているメソッドで、NULL文字(\0)で終端された文字配列へのポインタを返します。これにより、std::string型の文字列を、C言語スタイルの文字列として扱うことが可能になります。C言語の関数や、const char* 型の引数を受け取るAPIと連携する際に頻繁に