.net column
.NET開発者のためのブログメディア

図形の作成

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

 
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分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

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

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

Search

Popular

reccomended

Categories

Tags