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

JavaScriptで文字列内の単語数をカウントする関数の作り方

本記事では、任意の長さの文字列を引数として受け取り、その文字列に含まれる単語の総数を返すJavaScript関数の作成方法を解説します。

基本的な考え方

英語などのスペース区切りのテキストでは、単語の数は「スペースの数 + 1」と考えることができます。つまり、文字列を先頭から順に走査してスペースの出現回数を数え、初期値1に加算すれば単語数を求められます。ただし、空文字列の場合は単語が存在しないため、0を返すようにします。

コード例

const str = 'THis is an example string';
const findWords = (str = '') => {
    if(!str.length){
        return 0;
    };
    let count = 1;
    for(let i = 0; i < str.length; i++){
        if(str[i] === ' '){
            count++;
        };
    };
    return count;
};
console.log(findWords(str));

処理の流れ

  • まず、文字列の長さが0(空文字)の場合は0を返します。
  • 次に、カウンターcountを1で初期化します。これは最初の単語を表しています。
  • forループで文字列を1文字ずつ確認し、スペースが見つかるたびにカウントを1増やします。
  • 最後に、合計の単語数を返します。

出力結果

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

5

この例では、文字列「THis is an example string」に含まれる単語は5個であるため、正しく5が出力されています。

より簡潔な代替手段:split()メソッド

同様の処理は、split()メソッドと正規表現を組み合わせることで、より短く記述することもできます。

const countWords = (str = '') =>
    str.trim().split(/\s+/).filter(Boolean).length;

console.log(countWords('THis is an example string')); // 5

trim()で前後の余分な空白を除去し、連続する空白にも対応できるよう正規表現 /\s+/ で分割することで、より堅牢な単語カウントが可能になります。用途や可読性の要件に応じて、使い分けるとよいでしょう。

  1. JavaScriptで不正な時間文字列(HH:MM:SS)を正規化して修正する方法

    JavaScriptでは、「HH:MM:SS」形式の時間文字列を扱う場面がよくあります。しかし、時間の加算処理などで計算ミスが発生すると、分や秒が60を超えてしまう「壊れた」時間文字列が生成されることがあります。この記事では、そうした不正な時間文字列を正しく正規化する方法を解説します。 課題:壊れた時間文字列とは 今回求められるのは、JavaScriptで「HH:MM:SS」形式の時間文字列を受け取り、必要な修正を加えた上で、正しい時間文字列として返す関数を作成することです。 問題になるのは、加算処理のバグによって、次のような不正な値が含まれてしまうケースです。 MM(分)の部分が60を超え

  2. JavaScriptでテキスト内の出現回数上位3つの単語を抽出する方法

    課題英語のアルファベット文字列を引数として受け取るJavaScript関数を作成します。この関数は、文字列内に含まれる単語のうち、出現回数が多い上位3つの単語を返す必要があります。解決のアプローチ実装の手順は以下の通りです。1. 正規表現を使って記号やアンダースコアなどの不要な文字を除去し、連続する空白を1つにまとめます。2. 文字列をすべて小文字に変換してから、スペース区切りで配列に分割します。3. オブジェクト(マップ)を使って各単語の出現回数をカウントします。4. 出現回数の降順にソートし、上位3つの単語を返します。コード例以下が実際のコードです。 b[1] - a[1]);