.net column

.NET開発者のためのブログメディア
図形の作成

C#で最も多く使われるクラスのStringを基礎から解説・Stringの実体はchar型の集まり

2020年10月29日
SE
C#でのStringについて、要点をまとめていただけませんか。
PM
わかりました。それではC#で最も多く使われるクラスのStringについて要点をまとめてご紹介いたしましょう。

C#のStringとは?


C#のStringは文字列を扱うクラスです。おそらくC#のクラスで最も多く使われているクラスでしょう。なおC#では先頭のSは小文字でstringと記述しても良く、こちらを使用するのが一般的になっています。

 

Stringクラスの宣言は以下のように””で囲った文字列を=で代入することで出来ます。

 

string str = “”これは文字列です。””;

 

文字列の中でエスケープシーケンスと言われる\を使用する場合がありますが、文字列の先頭に@を付けるとエスケープが不要になります。例えば文字列に\を記述する場合はエスケープして\\とする必要がありますが、以下のように先頭に@があれば\だけで済みます。

 

string path1 = “”c:\\test\\test.txt””;
string path2 = @””c:\test\test.txt””;

エスケープシーケンスはこの辺を押さえておこう

Stringで使用するエスケープシーケンスの種類はたくさんあるのですが、主に使われる以下を押さえておけばいいでしょう。

 

\\ エスケープシーケンス
\”” ダブルクォーテーション
\t タブ
\r\n 改行

 

以下が使用例です。

 

Console.WriteLine(“”\\はエスケープシーケンスです。””);
Console.WriteLine(“”\””はダブルクォーテーションです。””);
Console.WriteLine(“”\tはタブです。””);
Console.WriteLine(“”改行\r\nできます。””);

 

実行すると以下のように表示されます。なお改行の\r\nはWindows環境での話で、別の環境では\rか\nのどちらかだけだったりします。

 

\はエスケープシーケンスです。
“”はダブルクォーテーションです。
はタブです。
改行
できます。

Stringの実体はchar型の集まり

Stringの実体は実はchar型の集まりで構成されています。char型の値はUTF-16と言われる16ビットサイズのユニコードです。そういった理由から以下のようにcharの配列で文字列を生成ができます。

 

char[] chars = { ‘あ’, ‘い’, ‘う’ };
Console.WriteLine(new String(chars));

 

これを実行すると「あいう」と表示されます。以下のようにすると指定回数リピートさせることもできます。

 

Console.WriteLine(new String(‘あ’, 5));

 

実行すると以下のように表示されます。

 

あああああ

文字列は+でつなげることができる

Stringの文字列は+記号でつなげることができます。以下のC#サンプルをご覧ください。

 

string str = “”今日の日付は”” + DateTime.Today + “”です。\r\n””;
str += “”今日で”” + 20 + “”歳になりました””;
Console.WriteLine(str);

 

実行すると以下のように表示されます。””””でかこった文字列だけでなく、数値や他のクラスの結果も+でつなぐことができます。

 

今日の日付は2020/09/27 0:00:00です。
今日で20歳になりました

速度を重視するならStringBuilderを使おう

ところが実は、上のC#サンプルの+でつなぐ方法はとても処理が重いのです。上と同じ事をStringBuilderクラスで実現できます。なおソースの先頭に「using System.Text」を追加してください。

 

StringBuilder stb = new StringBuilder(“”今日の日付は””);
stb.Append(DateTime.Today);
stb.Append(“”です。\r\n””);
stb.Append(“”今日で””);
stb.Append(20);
stb.Append(“”歳になりました””);
Console.WriteLine(stb.ToString());

 

文字列を+でつなぐよりStringBuilderでAppendする方が、数百倍から千倍以上も処理が速くなることがあります。速度重視の場合、+でつなぐのは避けた方が良いでしょう。

文字列同士の比較の方法

文字列が等しいかどうかは、C#では==で比較すればわかります。

 

string s1 = “”あああ””;
string s2 = “”あああ””;
if (s1 == s2) Console.WriteLine(“”同じ文字列です””);

 

JavaなどのC#以外の言語では==で比較してはいけないのですが、C#はこれで問題ありません。なお以下のようにEqualsと言うメソッドでも比較できます。Javaではこのやり方で比較しますね。

 

if (s1.Equals(s2)) Console.WriteLine(“”同じ文字列です””);

 

なお以下のようにすると、大文字と小文字の違いを無視して比較できます。

 

string s1 = “”AAA””;
string s2 = “”aaa””;
if (s1.Equals(s2,StringComparison.OrdinalIgnoreCase)) Console.WriteLine(“”同じ文字列です””);

文字列の中に特定の文字があるかをチェック

文字列に特定の文字がどの位置に含まれているか、は以下のように行います。

 

string str = “”あいうえお””;
Console.WriteLine(str.IndexOf(“”う””));
Console.WriteLine(str.IndexOf(“”えお””));
Console.WriteLine(str.IndexOf(“”か””));
Console.WriteLine(str.IndexOf(“”いか””));

 

実行結果は

 

2
3
-1
-1

 

となります。””あいうえお””の中に””う””は0から数えて2文字目、””えお””は3文字目、””か””と””いか””は無いので-1が戻ります。

文字列の前方一致と後方一致をチェック

文字列の前方や後方が指定した文字列と一致するかどうか、は以下のようにします。

 

string filename = “”abcde.txt””;
if (filename.StartsWith(“”ab””)) Console.WriteLine(“”前方一致””);
if (filename.EndsWith(“”.txt””)) Console.WriteLine(“”後方一致””);

 

上のIndexOfでも同じことは出来るのですが、こちらを使った方が処理の意図が明確になるでしょう。

空文字やnullかどうかをチェックする

String.Emptyを使うと空文字の””””かどうかをチェックできます。

 

string str = “”””;
if (str == String.Empty) Console.WriteLine(“”空文字です。””);

 

String.IsNullOrEmptyでnullか空文字かをチェックできます。

 

string str = null;
if (String.IsNullOrEmpty(str)) Console.WriteLine(“”nullか空文字です。””);

 

String.IsNullOrWhiteSpaceを使うとnullか空白かをチェックできます。

 

string str = “” ””;
if (String.IsNullOrWhiteSpace(str)) Console.WriteLine(“”nullか空白です。””);

 

もちろんこれらを使わずに普通に””””やnullや””””と比較はできますが、これらを使用した方がプログラムの意図が明確になるでしょう。

文字列の分割と結合

以下のC#サンプルは、文字列を指定した文字で区切って、それをまた結合します。

 

string csv = “”あああ,いいい,ううう””;
string[] ary = csv.Split(‘,’);
foreach(string s in ary)
{
Console.WriteLine(s);
}

 

string join = String.Join(“”,””,ary);
Console.WriteLine(join);

 

実行結果は、

 

あああ
いいい
ううう
あああ,いいい,ううう

 

となります。Splitで,で区切って配列にし、Joinでまた,で結合しています。

部分切り取りと削除

文字列から一部を切り取るには以下のようにします。

 

string str = “”あいうえお””;
Console.WriteLine(str.Substring(2, 2));

 

実行すると「うえ」と表示されます。0から数えて2文字目から、2文字切り取ったということです。

 

文字列の前後の空白やエスケープシーケンスを取り除くには以下のようにします。

 

string str = “”\t あ\r\nい う えお \r\n””;
Console.WriteLine(“”.””+str.Trim()+””.””);

 

実行すると、

 

.あ
い う えお.

 

となります。文字列の前後の全角半角スペースとエスケープシーケンスを削除しますが、途中にあるものは残っています。

 

以下のように指定した範囲を切り取ることもできます。

 

string str = “”あいうえお””;
Console.WriteLine(str.Remove(1,3));

 

実行結果は「あお」となります。0から数えて1文字目から3文字を削除しています。

SE
ありがとうございます。しっかり整理して正しく使いこなせるようにします。
PM
文字列処理はプログラミングの基本です。使いこなせるようにしっかり理解しておきましょう。

C#のStringの処理は多岐にわたる

C#のStringについて解説しましたがご理解頂けましたでしょうか。基本的な処理は一通り紹介しましたが、Stringで出来ることはまだまだ沢山あります。文字列処理はプログラミングの基本なので、是非マスターしましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)