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番目にしよう
『最後』を『名前』の(『名前』の『長さ』)番目にしよう
枠「最初の文字: {『最初』}、最後の文字: {『最後』}」を出力しよう
次の章では、状況によって違うことをさせる条件文を学びます。