C# 文字列をマスターする:基礎、操作、高度なテクニック
C# 文字列をマスターする:基礎、操作、高度なテクニック
このチュートリアルでは、実例を通じて C# の文字列とそのメソッドについて学習します。
C# において文字列は文字のシーケンスです。たとえば "hello" は 'h'、'e'、'l'、'l'、'o' の文字シーケンスを含む文字列です。
string キーワードで文字列を作成します。例:
// 文字列を作成
string str = "C# Programming";
ここでは str という string を作成し、テキスト "C# Programming" を割り当てました。C# では二重引用符で文字列を表します。
例:C# で文字列を作成
using System;
namespace CsharpString {
class Test {
public static void Main(string[] args) {
// 文字列を作成
string str1 = "C# Programming";
string str2 = "Programiz";
// 文字列を出力
Console.WriteLine(str1);
Console.WriteLine(str2);
Console.ReadLine();
}
}
}
出力
C# Programming Programiz
上記の例では str1 と str2 という 2 つの文字列を作成し、出力しました。
注意: C# の文字列変数は int、char などのプリミティブ型ではなく、String クラスのオブジェクトです。
文字列操作
C# 文字列にはさまざまな操作を行うメソッドが用意されています。よく使用される操作を見ていきます。
1. 文字列の長さを取得
文字列の長さを求めるには Length プロパティを使用します。例:
using System;
namespace CsharpString {
class Test {
public static void Main(string[] args) {
// 文字列を作成
string str = "C# Programming";
Console.WriteLine("string: " + str);
// str の長さを取得
int length = str.Length;
Console.WriteLine("Length: " + length);
Console.ReadLine();
}
}
}
出力
string: C# Programming Length: 14
Length プロパティは文字列の総文字数を計算して返します。
2. C# で 2 つの文字列を結合
Concat() メソッドで 2 つの文字列を結合できます。例:
using System;
namespace CsharpString {
class Test {
public static void Main(string[] args) {
// 文字列を作成
string str1 = "C# ";
Console.WriteLine("string str1: " + str1);
// 文字列を作成
string str2 = "Programming";
Console.WriteLine("string str2: " + str2);
// 2 つの文字列を結合
string joinedString = string.Concat(str1, str2);
Console.WriteLine("Joined string: " + joinedString);
Console.ReadLine();
}
}
}
出力
string str1: C# string str2: Programming Joined string: C# Programming
Concat() メソッドが str1 と str2 を結合し、joinedString に代入します。
C# では + 演算子でも文字列結合可能です。詳細は C# string Concat を参照してください。
3. C# で 2 つの文字列を比較
C# では Equals() メソッドで 2 つの文字列を比較できます。Equals() は 2 つの文字列が等しいかどうかをチェックします。例:
using System;
namespace CsharpString {
class Test {
public static void Main(string[] args) {
// 文字列を作成
string str1 = "C# Programming";
string str2 = "C# Programming";
string str3 = "Programiz";
// str1 と str2 を比較
Boolean result1 = str1.Equals(str2);
Console.WriteLine("string str1 and str2 are equal: " + result1);
// str1 と str3 を比較
Boolean result2 = str1.Equals(str3);
Console.WriteLine("string str1 and str3 are equal: " + result2);
Console.ReadLine();
}
}
}
出力
string str1 and str2 are equal: True string str1 and str3 are equal: False
str1、str2、str3 の 3 つの文字列を作成し、Equals() メソッドで等価性をチェックしています。
文字列オブジェクトの不変性
C# では文字列は不変(イミュータブル)です。つまり、一度文字列を作成すると、その文字列を変更することはできません。
理解のために例を考えます:
// 文字列を作成
string str = "Hello ";
ここでは str という文字列変数を作成し、"Hello " を保持しています。
ここで str を変更したいとします:
// 別の文字列 "World" を
// 前の文字列に追加
str = string.Concat(str, "World");
Concat() メソッドで "World" を前の文字列 str に追加しています。
しかし不変ならどうやって変更できたのでしょう?
実際に起きていることは:
- C# は文字列
"Hello "の値を取得します。 "World"を追加して新しい文字列を作成します。"Hello World"という値を持つ新しい文字列オブジェクトを作成し、str に格納します。- 元の文字列
"Hello "は他の変数から参照されていないため、ガベージコレクションの対象として解放されます。
文字列エスケープシーケンス
エスケープ文字は文字列内の特定の文字をエスケープするために使用します。つまり、特殊文字を文字列内に挿入するためにエスケープシーケンスを使います。
文字列内に二重引用符を含めたいとします:
// 二重引用符を含める
string str = "This is the "String" class";
文字列は二重引用符で表されるため、コンパイラは "This is the " を文字列とみなし、エラーになります。
これを解決するには C# でエスケープ文字 \" を使用します:
// エスケープ文字を使用
string str = "This is the \"String\" class.";
\ を二重引用符 " の前に置くことで、文字列内に含められます。
C# の主なエスケープシーケンス:
| エスケープシーケンス | 文字名 |
|---|---|
\' | 一重引用符 |
\" | 二重引用符 |
\\ | バックスラッシュ |
\0 | null |
\n | 改行 |
\t | 水平タブ |
文字列補間
C# では文字列補間を使用して変数を文字列内に埋め込めます。文字列リテラルは $ 文字で始める必要があります。例:
using System;
namespace CsharpString {
class Test {
public static void Main(string[] args) {
// 文字列を作成
string name = "Programiz";
// 文字列補間
string message = $"Welcome to {name}";
Console.WriteLine(message);
Console.ReadLine();
}
}
}
出力
Welcome to Programiz
name 変数を message 文字列内で使用しています。
string message = $"Welcome to {name}";
注目点:
- 文字列リテラルが
$で始まる - name 変数が中かっこ
{}内に配置される
C# 文字列のメソッド
C# にはさまざまな文字列メソッドがあります。主なもの:
| メソッド | 説明 |
|---|---|
Format() | フォーマット済み文字列を返す |
Split() | 文字列を部分文字列に分割 |
Substring() | 文字列の部分文字列を返す |
Compare() | 文字列オブジェクトを比較 |
Replace() | 指定文字を別の文字で置換 |
Contains() | 部分文字列を含むかチェック |
Join() | 指定区切り文字で文字列を結合 |
Trim() | 先頭と末尾の空白を削除 |
EndsWith() | 指定文字列で終わるかチェック |
IndexOf() | 指定文字の位置を返す |
Remove() | 文字列から文字を削除 |
ToUpper() | 大文字に変換 |
ToLower() | 小文字に変換 |
PadLeft() | 左側にパディング |
PadRight() | 右側にパディング |
StartsWith() | 指定文字列で始まるかチェック |
ToCharArray() | 文字配列に変換 |
LastIndexOf() | 指定文字列の最後の出現位置を返す |
よくある質問
1. C# で文字列配列を作成するには?
文字列配列は他のデータ型の配列と同様に作成します。例:
using System;
namespace CsharpString {
class Test {
public static void Main(string[] args) {
// 文字列型の配列
string[] animals = {"Monkey", "Dog", "Cat"};
// 配列要素を出力
Console.WriteLine(animals[0]);
Console.WriteLine(animals[1]);
Console.WriteLine(animals[2]);
Console.ReadLine();
}
}
}
出力
Monkey Dog Cat
2. C# で string と String の違いは?
string と String に技術的な違いはありません。C# では string は System.String のエイリアスです。
using System; なしでも動作する string の使用が推奨されます。
C言語
- C++文字列関数をマスター:strcpy、strcat、strlen、strcmpの実践例
- C 言語の文字列をマスター: 宣言、入力、出力、ライブラリ関数
- Python strip()メソッド完全ガイド:実践例付き
- Python str.count()マスター:文字と部分文字列のカウント実例集
- Python format()文字列を明確な例でマスター
- Python len()関数:オブジェクトの長さを測る実践ガイド
- Python String.find()メソッド完全ガイド:構文、例、代替手法
- Java文字列をマスター:生成、メソッド、ベストプラクティス
- Java Enumの文字列表現マスター:デフォルト、オーバーライド、高度なパターン
- Java String.charAt()完全解説:構文、戻り値、例外、実例
- Java String.endsWith()マスター:文字列サフィックスチェック実例付き