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

- システム
エンジニア - C#でのStringについて、要点をまとめていただけませんか。
- プロジェクト
マネージャー - わかりました。それでは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文字を削除しています。
- システム
エンジニア - ありがとうございます。しっかり整理して正しく使いこなせるようにします。
- プロジェクト
マネージャー - 文字列処理はプログラミングの基本です。使いこなせるようにしっかり理解しておきましょう。
C#のStringの処理は多岐にわたる
C#のStringについて解説しましたがご理解頂けましたでしょうか。基本的な処理は一通り紹介しましたが、Stringで出来ることはまだまだ沢山あります。文字列処理はプログラミングの基本なので、是非マスターしましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)