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

JavaScriptで文字列の各文字を次のアルファベットに置き換える方法

文字列を受け取り、文字列内のすべての英字を、それぞれ「次のアルファベット」に置き換えた新しい文字列を返すJavaScript関数を作成してみましょう。

要件の確認

たとえば、次のような文字列が入力された場合:

const str = 'how are you';

期待される出力

結果は以下のようになります:

const output = 'ipx bsf zpv';

ご覧のとおり、すべての英字が1文字ずつ後ろにシフトされています(h→i、o→p、w→x など)。一方、スペースなど英字以外の文字はそのまま維持されます。

実装のポイント

  • charCodeAt() を使って各文字の文字コード(Unicode値)を取得する
  • 大文字の A〜Z は 65〜90、小文字の a〜z は 97〜122 というコード範囲で英字かどうかを判定する
  • Z(90) および z(122) の場合は、A(65)a(97) へ折り返す(ラップアラウンド処理)
  • 英字以外の文字は変換せず、そのまま結果に連結する

サンプルコード

実際のコードは次のとおりです:

const str = 'how are you';

// 英字かどうかを判定するヘルパー関数
const isAlpha = code => (code >= 65 && code <= 90) || (code >= 97 && code <= 122);

// アルファベットの末尾(Z または z)かどうかを判定
const isLast = code => code === 90 || code === 122;

const nextLetterString = str => {
    const strArr = str.split('');
    return strArr.reduce((acc, val) => {
        const code = val.charCodeAt(0);
        // 英字以外はそのまま追加
        if (!isAlpha(code)) {
            return acc + val;
        };
        // Z / z の場合は A / a に戻る
        if (isLast(code)) {
            return acc + String.fromCharCode(code - 25);
        };
        // それ以外は次の文字へシフト
        return acc + String.fromCharCode(code + 1);
    }, '');
};

console.log(nextLetterString(str));

実行結果

コンソールには次のように出力されます:

ipx bsf zpv

コードの解説

まず split('') で文字列を1文字ずつの配列に分解し、reduce() を使って各文字を順番に処理しています。String.fromCharCode() は数値のコードポイントを対応する文字に変換するメソッドで、コードに「+1」することで次のアルファベットを取得できます。この仕組みを応用すれば、シーザー暗号のような文字シフト処理も簡単に実装できるので、ぜひ参考にしてください。

  1. JavaScriptのgetPrototypeOf()メソッドとは?具体例でわかる使い方とプロトタイプの確認方法

    JavaScriptのgetPrototypeOf()メソッドとは? getPrototypeOf()メソッドは、ユーザーが作成したオブジェクトのプロトタイプ(内部スロット [[Prototype]])を取得するために使用されるメソッドです。また、「2つのオブジェクトが同じプロトタイプを持っているかどうか」を比較したい場合にもよく活用されます。 以下に、getPrototypeOf()関数を使った具体的なコード例を示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta cha

  2. JavaScriptにおける継承の基本を具体例で解説

    JavaScriptは、クラスベースではなくプロトタイプベースのオブジェクト指向言語です。そのため、継承はprototype(プロトタイプ)オブジェクトを通じて実現されます。コンストラクタ関数のprototypeプロパティにメソッドやプロパティを追加すると、そのコンストラクタから生成されたすべてのインスタンスが、それらを共有して利用できるようになります。 プロトタイプによる継承の仕組み JavaScriptでは、インスタンスからプロパティやメソッドが参照されるとき、まずオブジェクト自身を検索し、見つからなければプロトタイプチェーンをたどって上位のオブジェクトへと探しに行きます。これにより、各イ