JavaScript: 文字列の処理: 文字と文字コード
概略
- 文字列は文字の集まりです。
配列と見なして文字を読み取ることができます。 - 文字には 1文字ずつ対応する数値があります (文字コード)。
- プログラムで文字列を表すときに エスケープ と呼ばれる 特殊な表現がときどき出てきます。改行コード (\n) など。
文字列は文字の集まり (2023/10)
文字列 (string) は 1文字ずつの 文字 (char, character, キャラクター) の集まりと見なすことができます。
let s1 = "あいう"; // 文字列を変数 s1 に代入します。 let s2 = "あ" + "い" + "う"; // + は文字の連結を表します。連結した文字を s2 に代入します。 // s1 も s2 も内容は同じです。 // 比較すると if (s1 == s2){ ... } は true になります。
文字列を文字の配列と見なして個々の文字を読み取ることができます。 変数名[インデックスの数字] で読むことができます。
例: let s = "ABC"; のとき s[0] は A。1番目の文字。最初のインデックスは 1 ではなくて 0 になります。 s[1] は B。2番目の文字。 s[2] は C。3番目の文字。
最初のインデックスの数字が 1 ではなくて 0 になる点に注意してください。 配列のデータを扱うときには 0 の方が便利なので遠い昔からそうなっています。
- TestJS_string_char01.html
文字列の個々の文字を読み取るサンプル。 - 文字列の位置を調べる
文字列中の文字を置き換えることはできません
文字列のデータは読み出し専用です。 文字を読むことができますが、 後から文字をセットして置き換えることはできません。
let s = "abc"; s[1] = "B"; //(誤り) 置き換えはできない。s は "aBc" にはなりません。
文字を置き換える場合は 文字列の置換処理で新しい文字列を作り直すことが必要です。 元の文字列の内容を変更することはできません。 専門的には 不変 (イミュータブル, immutable : 変更できない) といった用語を使います。string は不変の原始型のデータです。
JavaScript では文字型 (Char 型) がありません
s[0] などで取り出した文字も長さが 1 の文字列 (string) になります。 C言語、Java, C# などの言語には文字列 (string) とは別に文字型 (char) があります。
文字コード (2023/10)
文字では 「あ」「A」「a」「1」など個々の文字に対して 1つずつ対応する数値が割り当てられています (文字コード)。
例えばアルファベット「A」の文字コードは 49 (16進数で 0x31)、 ひらがな「あ」の文字コードは 12354 (0x3042) です。 コンピュータは文字を直接理解できないので 文字列も数値データの集まりと見なして処理します。
String.charCodeAt() 関数
文字コードの値は String.charCodeAt() で調べることができます。
- TestJS_string_charCodeAt01.html
String.fromCharCode のサンプル。 - TestJS_string_charCodeAt02.html
入力した文字列の文字コードを表示する。 - TestJS_string_unicode01.html
ユニコード文字の一覧表 (一部)。
文字列の大小比較
文字や文字列も文字コードの値を見て大小を比較することができます。 複数の文字列をあいうえお順や ABC 順に並べ替える (ソート: sort) ときに多用します。
関連
エスケープ文字 \ (2023/10)
文字列内の文字で \ は特別な扱いの文字になります (エスケープ文字)。 \ の次に現れる文字と組み合わせて特殊な意味を持たせます。
- MDN: 文字エスケープ: \n, \u{...}
文字 \ は海外ではバックスラッシュ \ になります。 \ と同じ意味です。最初に混乱する話ですが気にしないでください。
例えば文字列の改行を意味する文字コードは表示する文字を持たないので、 そのままではアルファベットやひらがなのような 文字データとして入力できません。 このようなときにエスケープ文字 \ と組み合わせて改行コードを表現します。
◎ JavaScript の文字列で使用するエスケープ文字の例 \n 改行を表す。 \t タブを表す。 \\ 文字 \ を表す。
- 改行を表す文字コード
HTMLファイルなどのテキストファイルの改行文字の話。 - TestJS_string_escape01.html
JavaScript で改行やタブなどの特殊文字を \エスケープで表す。\n, \t など。
その他
Java の人向けの話
JavaScript の文字列では 1) 原始型の文字列と 2) Object のサブクラスの String があります。 JavaScript では原始型の文字列しか使いません。 new String() で String オブジェクトを作る場面は多分ないと思います。 new String() で作るとトラブルの原因になるので注意。
1) 原始型の文字列 let s = "文字列"; 2) String オブジェクトの文字列 let s = new String("文字列"); //こちらは使いません。
- TestJS_string_compare02.html
new String() で == 比較すると false になります。 JavaScript では new String() で文字列を作らない方が良いです。
JavaScript: 文法などのノート
- TestJS_string_concat_time01.html
文字列を + で連結する話を気にする必要はありません。 オブジェクトの大量生産でガベージコレクションだらけみたいな話にはなりません・・・。
JavaScript: 文字列を連結する