【もじれつ】

文字列 とは?

💡 文字をビーズのように一列に並べた「ネックレス」
📌 このページのポイント
文字列(String)― 文字の並び "Hello" をメモリ上で見ると… H [0] e [1] l [2] l [3] o [4] \0 終端 よく使う文字列操作 結合 "A" + "B" → "AB" 分割 "A,B" → ["A","B"] 検索 "Hello".indexOf("l") 置換 "Hi".replace(…) 多くの言語で文字列はイミュータブル(変更不可)なオブジェクト
文字列のイメージ
ひよこ ひよこ

シングルクォートとダブルクォートってどっちを使えばいいの?

ペンギン先生 ペンギン先生

JavaScriptではどちらでも動作は同じ。チームやプロジェクトで統一するのが大事で、ESLintなどのツールで強制することが多い。変数を埋め込みたいときはバッククォートのテンプレートリテラルが一番便利。

ひよこ ひよこ

文字列が不変ってどういうこと?

ペンギン先生 ペンギン先生

たとえば str.toUpperCase() を呼んでも元の str は変わらない。大文字になった新しい文字列が返ってくる。元を変えたいなら str = str.toUpperCase() のように代入し直す必要がある。

ひよこ ひよこ

数字と文字列の "123" って何が違うの?

ペンギン先生 ペンギン先生

数字の 123 は計算できるけど、文字列の "123" はただのテキスト。"1" + "2" は "12" になる(文字の連結)。型を意識しないとバグの原因になるから、Number() や parseInt() で変換することを覚えておこう。

ひよこ ひよこ

文字列の比較で == を使っちゃダメなの?

ペンギン先生 ペンギン先生

言語による。JavaScriptでは「===」を使うのが推奨(==だと型変換が発生して予想外の結果になる)。Javaでは「==」は参照の比較になるから、文字列の内容を比べるには「.equals()」を使う。Pythonは「==」で内容比較ができるから問題ない。言語ごとの罠を知っておくことが大事だよ。

ひよこ ひよこ

絵文字を含む文字列って扱いが難しいって聞いたけど?

ペンギン先生 ペンギン先生

難しいよ。JavaScriptの「'😀'.length」は2を返す。これは絵文字がUTF-16で2つのサロゲートペアで表されるからなんだ。正確な文字数を数えるには[...'😀'].lengthのようにスプレッド構文を使う。さらに肌の色を変えた絵文字や国旗絵文字はもっと複雑で、複数のコードポイントがZWJ(ゼロ幅接合子)でつながっている。文字列処理は奥が深いんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
文字列って出てきたら「クォートで囲まれたテキストデータ」と思えばだいたいOK!
📖 おまけ:英語の意味
「string」 = ひも、一連のもの
💬 文字を一列に「ひもでつないだ」ようなイメージから名づけられた
← 用語集にもどる