CodeGym /コース /C# SELF /stringクラスの基本メソッド

stringクラスの基本メソッド

C# SELF
レベル 9 , レッスン 3
使用可能

1. はじめに

実際によくある文字列のタスクはこんな感じ:

  • 文字列の長さを取得する(空かどうかもチェック)。
  • 文字の大文字・小文字を変換する(全部UPPERか全部lowerにする)。
  • 文字列が特定の単語や文字を含んでいるか調べる。
  • 「悪い言葉」をもっとマイルドな言葉に置き換える。
  • 区切り文字で文字列を分割する(例:「カンマ区切りの電話番号リスト」)。
  • 文字列の先頭と末尾の空白を削除する。
  • 文字列の一部を抜き出す(例:名字の最初の3文字)。
  • 2つの文字列を比較する ― 大文字小文字を無視して一致するかどうか。

こういうタスクごとに、stringクラスには専用のメソッドがあるよ。

主なメソッドの表

操作 メソッド/プロパティ
文字列の長さ
Length
name.Length
最初の文字
[0]
name[0]
最後の文字
[name.Length - 1]
name[name.Length - 1]
小文字に変換
ToLower()
name.ToLower()
大文字に変換
ToUpper()
name.ToUpper()
部分文字列があるかチェック
Contains()
name.Contains("イワン")
部分文字列の位置
IndexOf()
name.IndexOf("а")
部分文字列を抜き出す
Substring()
name.Substring(1, 3)
文字列を比較
Equals(), ==
name.Equals("ペトル")
空白を削除
Trim()
name.Trim()
区切り文字で分割
Split()
csv.Split(',')
配列を文字列に結合
string.Join()
string.Join("-", array)
一部を置換
Replace()
text.Replace("スタロエ", "ノヴォエ")
空文字列?
IsNullOrEmpty()
string.IsNullOrEmpty(name)

今日はこの中からいくつかピックアップして解説するよ。

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」じゃないよ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION