カナデKanade

4. 文字を扱う(文字列)

文字をつなげたり、数えたり、切り取ったり、変えたりしましょう。

この章で学ぶこと

  • 文字をつなげる、文字数を数える
  • 何番目かの文字を取り出す、切り取る
  • 入れ替える、分割する、含まれているか確かめる
  • 改行のような特別な文字を書く(エスケープ)

かぎかっこで囲んだ文字を文字列と呼びます。名前、文章、メッセージのように、プログラムが扱う値の多くは文字列です。


つなげる

文字列どうしは+でつなげられます。名札に入っている文字列の後ろに付けるときは、足そうを使ってもかまいません。

『あいさつ』を「こんに」 + 「ちは」にしよう
『あいさつ』に「!」を足そう
『あいさつ』を出力しよう

こんにちは!が出ます。数字を付けたいときは、〈文字列に〉で変えるか(2章)、はじめから枠を使うと便利です(1章)。

『名前』を「カナデ」にしよう
『点数』を95にしよう
枠「{『名前』}の点数は{『点数』}点です。」を出力しよう

文字数を数える: 『長さ』

『名札』の『長さ』で、文字がいくつあるか分かります。スペースも1文字と数え、ひらがなも漢字も1文字は1文字です。

『名前』を「山田太郎」にしよう
(『名前』の『長さ』)を出力しよう
(「こんにち は」の『長さ』)を出力しよう

4と6が出ます。


何番目かの文字を取り出す

『名札』のN番目で、N番目の文字を取り出します。最初の文字が1番目です。

『言葉』を「カナデ言語」にしよう
(『言葉』の1番目)を出力しよう
(『言葉』の4番目)を出力しよう

カと言が出ます。0番目や、文字数より大きい番目は存在しない位置なので、エラーになります。

『言葉』を「カナデ言語」にしよう
(『言葉』の6番目)を出力しよう

「文字列の長さを超えた位置です。」 というエラーが出ます。最後の文字が欲しいときは、(『言葉』の『長さ』)番目のように長さを使って取り出せばいいんです。

『言葉』を「カナデ言語」にしよう
(『言葉』の(『言葉』の『長さ』)番目)を出力しよう

4つの文字列ツール

文字列の後ろにの〈ツール〉(…)を付けて使う道具があります。

ツール すること 例 結果
〈切り取り〉(始め, 終わり) 始め番目から終わり番目まで(両方含む) 「カナデ言語」の〈切り取り〉(1, 3) 「カナデ」
〈入れ替え〉(探すもの, 変えるもの) 見つけた所を全部入れ替えます 「りんご なし りんご」の〈入れ替え〉(「りんご」, 「みかん」) 「みかん なし みかん」
〈分割〉(区切り) 区切りの文字で分けてリストに 「りんご,なし」の〈分割〉(「,」) [りんご, なし]
〈含むか確認〉(探すもの) 含まれていれば真、なければ偽 「カナデ言語」の〈含むか確認〉(「言」) 真
『文』を「りんご なし りんご」にしよう
(『文』の〈切り取り〉(1, 3))を出力しよう
(『文』の〈入れ替え〉(「りんご」, 「みかん」))を出力しよう
(『文』の〈分割〉(「 」))を出力しよう
(『文』の〈含むか確認〉(「なし」))を出力しよう
  • 〈切り取り〉の終わりが文字数より大きいと、ある所までだけ切り取ります。
  • 〈分割〉の結果はリストです。リストは7章で詳しく学びます。
  • 〈含むか確認〉の結果真/偽は、5章の条件文と一緒に使うと便利です。

これらの道具は元の文字列を変えずに、新しい文字列を作ってくれます。 結果をこの先も使うなら、名札に入れてください。

『文』を「りんご なし りんご」にしよう
『文』の〈入れ替え〉(「りんご」, 「みかん」)を実行しよう
『文』を出力しよう
『文』を『文』の〈入れ替え〉(「りんご」, 「みかん」)にしよう
『文』を出力しよう

1つ目の出力はそのままりんご なし りんご、2つ目の出力はみかん なし みかんです。


文字列は書き換えられません

文字列は一度作られると、その中の1文字だけを変えることはできません。

『名前』を「山田太郎」にしよう
『名前』の1番目を「木」にしよう

変えたいなら、望む形の新しい文字列を作って入れ直してください。

『名前』を「山田太郎」にしよう
『名前』を「木」 + 『名前』の〈切り取り〉(2, 4)にしよう
『名前』を出力しよう

木田太郎が出ます。


特別な文字: エスケープ

文字列の中で改行したり、かぎかっこそのものを書いたりしたいときは、バックスラッシュ(\)を前に付けた、決められた文字を使います。

書き方 意味
\n 改行
\t タブ(一定の間隔)
\「、\」 かぎかっこ「、」そのもの
\\ バックスラッシュ\そのもの
「1行目\n2行目」を出力しよう
「名前\t点数」を出力しよう
「彼は\「こんにちは\」と言いました。」を出力しよう

文字を比べる

2つの文字列が同じかどうかは同じだで確かめます。大きい・小さいで比べると、辞書の順番(あいうえお順・ABC順)で前に来るほうが小さくなります。

(「カナデ」が「カナデ」と同じだ)を出力しよう
(「あ」が「い」より小さい)を出力しよう

どちらも真が出ます。比較は5章の条件文でよく使います。


よくある間違い

1. 0番目から数える

ほかの言語を学んだことがあると、最初の文字を0番目と勘違いしがちです。カナデは1番目から数えます。

2. ツールの結果を入れない

『文』の〈入れ替え〉(…)は新しい文字列を返すだけなので、『文』はそのままです。変わった結果が必要なら、にしようで入れてください。

3. 数字をそのままつなげる

「点数: 」 + 90はエラーです。枠「点数: {90}」か「点数: 」 + 〈文字列に〉(90)を使ってください。


まとめ

やりたいこと 書き方
つなげる 「こんに」 + 「ちは」、『あいさつ』に「!」を足そう
文字数 『言葉』の『長さ』
N番目の文字 『言葉』の1番目(1から数える)
一部を切り取る 『言葉』の〈切り取り〉(1, 2)
入れ替える 『言葉』の〈入れ替え〉(「あ」, 「い」)
分割する 『言葉』の〈分割〉(「,」) → リスト
含まれているか 『言葉』の〈含むか確認〉(「あ」) → 真/偽
改行 \n

練習問題

1. 『メール』に「kanade@example.com」を入れて、@の前の部分(ID)だけを出力してみましょう。(ヒント: 〈分割〉)

(参考) ここに書いてみましょう。
答えの例
『メール』を「kanade@example.com」にしよう
『欠片』を『メール』の〈分割〉(「@」)にしよう
(『欠片』の1番目)を出力しよう

kanadeが出ます。

2. 文の中の「きらい」を全部「すき」に変えて出力してみましょう。

『文』を「にんじんがきらい。きゅうりもきらい。」にしよう
答えの例
『文』を「にんじんがきらい。きゅうりもきらい。」にしよう
『文』を『文』の〈入れ替え〉(「きらい」, 「すき」)にしよう
『文』を出力しよう

3. 名前の最初の文字と最後の文字を枠で出力してみましょう。名前が何文字でも動くようにしてください。

答えの例
『名前』を「長谷川花子」にしよう
『最初』を『名前』の1番目にしよう
『最後』を『名前』の(『名前』の『長さ』)番目にしよう
枠「最初の文字: {『最初』}、最後の文字: {『最後』}」を出力しよう

次の章では、状況によって違うことをさせる条件文を学びます。

プレイグラウンド
結果
コードを書いて「実行」ボタンを押してください。