1. はじめに
実際によくある文字列のタスクはこんな感じ:
- 文字列の長さを取得する(空かどうかもチェック)。
- 文字の大文字・小文字を変換する(全部UPPERか全部lowerにする)。
- 文字列が特定の単語や文字を含んでいるか調べる。
- 「悪い言葉」をもっとマイルドな言葉に置き換える。
- 区切り文字で文字列を分割する(例:「カンマ区切りの電話番号リスト」)。
- 文字列の先頭と末尾の空白を削除する。
- 文字列の一部を抜き出す(例:名字の最初の3文字)。
- 2つの文字列を比較する ― 大文字小文字を無視して一致するかどうか。
こういうタスクごとに、stringクラスには専用のメソッドがあるよ。
主なメソッドの表
| 操作 | メソッド/プロパティ | 例 |
|---|---|---|
| 文字列の長さ | |
|
| 最初の文字 | |
|
| 最後の文字 | |
|
| 小文字に変換 | |
|
| 大文字に変換 | |
|
| 部分文字列があるかチェック | |
|
| 部分文字列の位置 | |
|
| 部分文字列を抜き出す | |
|
| 文字列を比較 | |
|
| 空白を削除 | |
|
| 区切り文字で分割 | |
|
| 配列を文字列に結合 | |
|
| 一部を置換 | |
|
| 空文字列? | |
|
今日はこの中からいくつかピックアップして解説するよ。
2. 文字列を配列みたいに扱う
文字列の長さ:プロパティLength
一番シンプルなのは、文字列の長さを知ること。これはLengthプロパティを使うよ。例:
string name = "アルカディイ";
Console.WriteLine(name.Length); // 出力: 7
- Lengthはプロパティ(メソッドじゃない)だからカッコはいらないよ。
- 文字列が空("")なら長さは0になる。
何か「危ない」操作(例:部分文字列を取る)をする前に、長さをチェックするのは便利だよ。
インデックスで文字を取得:インデクサ[i]
配列と同じ感覚で:文字列は文字の配列だよ。例:
string hello = "プリヴェット";
char firstChar = hello[0]; // 'プ'
char lastChar = hello[^1]; // 'ト'
Console.WriteLine(firstChar);
- インデックスは0から始まるよ!
- 存在しないインデックス(hello[100])にアクセスすると例外が出るから注意。
3. 文字列の比較
比較演算子==と!=
C#では、これらの演算子は2つの文字列の内容をそのまま比較するよ。
string word1 = "Hello";
string word2 = "Hello";
bool areEqual = word1 == word2; // true
Equalsメソッド
==演算子と違って、Equalsメソッドはパラメータを渡せる。例えば大文字小文字を無視して比較したい時 ― "ママ" == "мама" も "МАМА" も同じにしたい場合。例:
string pass1 = "Qwerty";
string pass2 = "qwerty";
// 通常の比較(大文字小文字区別あり)
bool isSame = pass1.Equals(pass2); // false
// 大文字小文字を無視して比較
bool ignoreCase = pass1.Equals(pass2, StringComparison.OrdinalIgnoreCase); // true
4. 大文字・小文字の変換
文字列を全部大文字(または小文字)にしたい時は、stringクラスの2つのメソッド:ToLower()とToUpper()を使うよ。
例えば、ユーザーに「重要!」って強調したい時や、比較のために全部小文字にしたい時も簡単:
string text = "ムネ ネ ストラシェン セーリイ ヴォルク!";
Console.WriteLine(text.ToUpper()); // ムネ ネ ストラシェン セーリイ ヴォルク!
Console.WriteLine(text.ToLower()); // むね ね すとらしぇん せーりい うぉるく!
- 注意:元の文字列は変わらないよ!
- 比較の時に大文字小文字を無視したい場合にも使える。
5. 余計な空白を削除
ユーザーがうっかり(あるいはわざと?)名前の前後に空白を入れた場合は、Trimが便利!3種類あるよ:
- Trim ― 文字列の先頭と末尾の空白を全部削除;
- TrimStart ― 先頭の空白だけ削除;
- TrimEnd ― 末尾の空白だけ削除。
string raw = " ゴーシャ ";
string cleaned = raw.Trim(); // "ゴーシャ"
Console.WriteLine($"[{cleaned}]");
6. 部分文字列を取得:Substring
文字列の一部だけ抜き出したい時に使うよ。
string word = "プリヴェット";
string part = word.Substring(2); // "ヴェット"
string part2 = word.Substring(2, 3); // "ヴェ"
- Substring(startIndex) ― startIndexの位置から最後まで。
- Substring(startIndex, length) ― startIndexからlength文字分。
注意:範囲外やlength < 0だと例外が出るよ!
7. 文字列が空かどうかチェック
文字列を使う前(例:補間で使う時)は、nullや空文字じゃないかチェックしよう。そうしないとエラーや予期しない結果になるかも。
a) nullチェック:==演算子
string s = null;
if (s == null)
Console.WriteLine("ストロカ ラヴナ null");
デメリット:空文字("")は拾えない。
b) string.IsNullOrEmpty()でチェック
nullも空文字も両方チェックできる:
string s = "";
if (string.IsNullOrEmpty(s))
Console.WriteLine("ストロカ プスタ イリ ラヴナ null");
c) string.IsNullOrWhiteSpace()でチェック
空白やタブなど「見えない」文字だけの文字列も含めてチェックできる:
string s = " ";
if (string.IsNullOrWhiteSpace(s))
Console.WriteLine("ストロカ プスタ, null イリ トルコ イズ プロベロフ");
8. 文字列メソッドでありがちなミス
- 一番多いのは、文字列がイミュータブル(変更不可)ってことを忘れること(さっき説明した通り)。
- もう一つよくあるのは、検索や比較で大文字小文字の区別を忘れること。
例えば、ユーザーが"アンドレイ"と入力して、リストに"アンドレイ"が既にあっても、Containsや==をそのまま使うと一致しない場合がある。両方同じケースに変換するか、対応するメソッドのオーバーロードを使おう。
あと、インデックスを返すメソッドにも注意。インデックスは0から始まるし、-1が返ってきたら「見つからなかった」って意味で、「インデックス0」じゃないよ。
GO TO FULL VERSION