【JavaScript】文字列からn番目に出現する文字を削除するremoveStr関数の実装方法
はじめに
JavaScriptでは、標準の文字列メソッドだけでも多くの操作が可能ですが、独自のメソッドをString.prototypeに追加することで、より柔軟な文字列処理を実現できます。
今回は、文字列から指定した部分文字列の「n番目の出現」だけを削除するremoveStr()関数を実装してみましょう。
関数の仕様
removeStr()はString.prototypeに登録されるため、元の文字列はthisとして参照されます。引数としては次の2つを受け取ります。
- subStr … 削除対象の文字または部分文字列
- num … 何番目の出現を削除するかを示す数値
また、部分文字列が文字列内に存在しない場合や該当する出現が見つからない場合は、-1を返す仕様とします。
実装コード
const str = 'aaaaaa';
const subStr = 'a';
const num = 6;
const 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));
コードの解説
- 存在チェック:this.includes(subStr)により、対象の部分文字列が含まれていない場合は即座に-1を返します。
- スライディングウィンドウ:変数startとendを用意し、substring(start, end)で切り出した部分がsubStrと一致するかを先頭から順に確認していきます。
- 出現のカウント:一致するたびにoccurencesをインクリメントし、num番目に到達した時点で処理を打ち切ります。
- 削除と再結合:該当箇所の前半(substring(0, start))と後半(substring(end, this.length))を連結することで、n番目の出現だけを取り除いた新しい文字列を生成して返します。
実行結果
aaaaa
この例では、「aaaaaa」の中で6個目に出現する「a」が削除され、コンソールには「aaaaa」と表示されます。
補足:より安全な実装にするには
上記のコードは、num番目の出現が必ず見つかることを前提としているため、numが実際の出現回数を超えるとループが止まらなくなる恐れがあります。実運用では、ループに明確な終了条件を設けるのがおすすめです。
for(; end <= this.length; end++, start++){
if(this.substring(start, end) === subStr){
occurences++;
}
if(occurences === num){
return this.substring(0, start) + this.substring(end, this.length);
}
}
return -1;
このようにすれば、文字列の末尾まで探索しても該当する出現がなかった場合に、安全に-1を返せるようになります。
-
PHPのsubstr()関数とは?文字列を切り出す方法を実例付きで徹底解説
PHPには、さまざまな機能を持つ組み込み関数が多数用意されています。その中でもsubstr()は文字列を扱うための組み込み関数で、文字列の一部を抽出(切り出し)する際に利用されます。 本記事では、substr()関数の基本構文、各パラメータの意味、実際のコード例と出力結果まで、わかりやすく解説していきます。 substr()関数の基本構文 substr(string, start, length) substr()関数には最大3つのパラメータを渡すことができ、このうち「string」と「start」の2つが必須、「length」は省略可能です。それぞれのパラメータについて詳しく見ていき
-
PHPのsubstr()関数の使い方を徹底解説!文字列の一部を抽出する方法
PHPのsubstr()関数は、文字列の一部を抽出して返すための関数です。指定した開始位置から、指定した長さ分だけ文字列を取り出すことができます。構文substr(str, begin, len)パラメータstr − 対象となる元の文字列を指定します。begin − 文字列のどこから抽出を開始するかを指定します。正の数 − 文字列の先頭から数えて指定位置から抽出を開始します。負の数 − 文字列の末尾から数えて指定位置から抽出を開始します。0 − 文字列の最初の文字から抽出を開始します。len − 抽出する文字列の長さを指定します。省略した場合は、開始位置から文字列の末尾までが返されます。正の数