JavaScriptで文字列内の隣接する単語を入れ替える方法
JavaScriptでは、文字列を受け取り、文字列の末尾に達するまで隣接する単語同士を入れ替えていく関数を求められることがあります。本記事では、split()とreduce()を組み合わせて、この処理を簡潔に実装する方法を解説します。
実装例
以下のコードは、与えられた文字列内の隣接する単語を順に入れ替える関数の実装例です。
const str = "This is a sample string only";
const replaceWords = str => {
return str.split(" ").reduce((acc, val, ind, arr) => {
if(ind % 2 === 1){
return acc;
}
acc += ((arr[ind+1] || "") + " " + val + " ");
return acc;
}, "");
};
console.log(replaceWords(str));コードの仕組み
この関数が動作する流れは以下のとおりです。
1. 文字列を単語ごとに分割する
split(" ")を使って、文字列をスペース区切りで配列に変換します。例えば"This is a sample string only"は、["This", "is", "a", "sample", "string", "only"]という配列になります。
2. reduce()でペアを作り直す
reduce()の内部では、インデックス(ind)が奇数の場合はスキップし、偶数の位置にある単語とその次の単語(arr[ind+1])を入れ替えた順序で連結していきます。
3. 奇数個の場合への対応
単語数が奇数の場合、最後の単語には「次の単語」が存在しないため、(arr[ind+1] || "")というフォールバック処理で空文字を代入しています。これによりエラーを防ぎつつ、余った単語をそのまま末尾に追加できます。
出力結果
コンソールには次のように出力されます。
is This sample a only string
元の文字列「This is a sample string only」に対して、「This」と「is」、「a」と「sample」、「string」と「only」の各ペアがそれぞれ入れ替えられていることが確認できます。
-
JavaScriptで隣接する同一単語のペアを数える方法
問題概要英文の文章を表す文字列 str を引数として受け取るJavaScript関数を作成します。この関数の目的は、文字列の中で隣り合って登場する同じ単語のペアがいくつあるかを数え、その個数を返すことです。比較の際には大文字と小文字を区別しないため、it と It は同一の単語としてカウントされます。入力例const str = This this is a a sample string;出力例const output = 2;出力の説明文中の This this と a a の2箇所で同じ単語が連続して現れているため、結果は 2 となります。実装コード以下が実際のコード例です。const
-
C#で文字列内の文字を入れ替える方法(Selectメソッド活用)
C#で文字列に含まれる特定の文字を別の文字と入れ替えたい場合、LINQのSelectメソッドを使うと簡潔に実装できます。文字列はイミュータブル(不変)なため、直接書き換えることはできませんが、各文字を変換した新しい配列から文字列を再生成することで対応できます。まず、対象となる文字列を用意します。ここでは次の文字列を例にします。string str = PQRQP;この文字列に含まれるすべての「P」を「Q」に、「Q」を「P」に入れ替えます。Selectメソッドと三項演算子を組み合わせると、次のように1行で記述できます。str.Select(a => a == P ? Q : (a == Q