文字列.Replace() / Contains()
| 対応: | C# 1.0(2002) |
|---|
文字列を置換する『Replace()』、指定した文字列が含まれるか調べる『Contains()』、先頭・末尾の一致を調べる『StartsWith()』『EndsWith()』メソッドです。
構文
// oldValue を newValue に置換した文字列を返します。 文字列.Replace(string oldValue, string newValue) // 指定した文字列を含むか調べます。含む場合は true を返します。 文字列.Contains(string value) // 指定した文字列で始まるか調べます。 文字列.StartsWith(string value) // 指定した文字列で終わるか調べます。 文字列.EndsWith(string value)
メソッド一覧
| メソッド | 概要 |
|---|---|
| Replace(string oldValue, string newValue) | 文字列中の oldValue をすべて newValue に置換した新しい文字列を返します。 |
| Contains(string value) | 文字列が value を含む場合は true、含まない場合は false を返します。 |
| StartsWith(string value) | 文字列が value で始まる場合は true を返します。 |
| EndsWith(string value) | 文字列が value で終わる場合は true を返します。 |
サンプルコード
Program.cs
using System;
string sentence = "C#はオブジェクト指向のプログラミング言語です。C#はMicrosoftが開発しました。";
// Replace() で置換する(すべての出現箇所が置換される)
string replaced = sentence.Replace("C#", "シーシャープ");
Console.WriteLine(replaced);
// シーシャープはオブジェクト指向のプログラミング言語です。シーシャープはMicrosoftが開発しました。
// Contains() で含有チェックをする
Console.WriteLine(sentence.Contains("Microsoft")); // True
Console.WriteLine(sentence.Contains("Java")); // False
// StartsWith() / EndsWith() で先頭・末尾を確認する
string url = "https://wp-p.info";
Console.WriteLine(url.StartsWith("https")); // True
Console.WriteLine(url.EndsWith(".info")); // True
Console.WriteLine(url.EndsWith(".com")); // False
dotnet run シーシャープはオブジェクト指向のプログラミング言語です。シーシャープはMicrosoftが開発しました。 True False True True False
大文字・小文字を区別しない検索
デフォルトでは大文字・小文字を区別します。区別しないで比較したい場合は StringComparison.OrdinalIgnoreCase を渡します。
CaseInsensitive.cs
using System;
string text = "Hello, C# World!";
// 大文字・小文字を区別する(デフォルト)
Console.WriteLine(text.Contains("hello")); // False
Console.WriteLine(text.StartsWith("hello")); // False
// 大文字・小文字を区別しない
Console.WriteLine(text.Contains("hello", StringComparison.OrdinalIgnoreCase)); // True
Console.WriteLine(text.StartsWith("hello", StringComparison.OrdinalIgnoreCase)); // True
// Replace() で文字を削除する(空文字に置換)
string noSpaces = "Hello, C# World!".Replace(" ", "");
Console.WriteLine(noSpaces); // Hello,C#World!
dotnet run False False True True Hello,C#World!
実践パターン: URL バリデーション
StartsWith() と EndsWith() を組み合わせてURLバリデーションを行う例です。
UrlValidation.cs
using System;
string[] urls = {
"https://wp-p.info",
"http://example.com",
"ftp://files.example.org",
"https://api.example.jp/data"
};
foreach (string url in urls) {
bool isHttps = url.StartsWith("https://");
bool isJpDomain = url.Contains(".jp");
Console.WriteLine($"{url} → HTTPS: {isHttps}, .jp ドメイン: {isJpDomain}");
}
dotnet run https://wp-p.info → HTTPS: True, .jp ドメイン: False http://example.com → HTTPS: False, .jp ドメイン: False ftp://files.example.org → HTTPS: False, .jp ドメイン: False https://api.example.jp/data → HTTPS: True, .jp ドメイン: True
よくあるミス
よくあるミス: Replace() の戻り値を使い忘れる
C# の文字列はイミュータブル(変更不可)です。『Replace()』は元の文字列を変更せず、新しい文字列を返します。戻り値を変数に代入しないと置換結果が失われます。
using System;
// NG: Replace() の戻り値を変数に代入していない
string name = "Yagami Iori";
name.Replace("Iori", "Kyo"); // 新しい文字列は捨てられる
Console.WriteLine(name); // Yagami Iori(元のまま)
dotnet run Yagami Iori
修正後は次の通りです。
using System;
// OK: 戻り値を変数に代入する
string name = "Yagami Iori";
string replaced = name.Replace("Iori", "Kyo");
Console.WriteLine(replaced); // Yagami Kyo
dotnet run Yagami Kyo
概要
これらのメソッドはすべて大文字・小文字を区別します。区別せずに比較したい場合は引数に StringComparison.OrdinalIgnoreCase を渡すか、事前に『ToUpper() / ToLower()』で統一してから比較する方法もあります。
C# の文字列はイミュータブルなので、『Replace()』は元の文字列を変更せず新しい文字列を返します。戻り値を変数に代入して使用してください。
文字列の分割には『Split() / string.Join()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。