.NET > 文字列


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

string型

C#では文字列の扱いはすべてstring型で扱う。
stringはSystem::Stringクラスなので、文字列に関する多くの操作はStringクラスが実装している。

内部はユニコードである。

文字の操作方法一覧

操作 呼び出しサンプル 説明
文字列の長さ s.Length Lengthプロパティを使用する。
"文字".Length 拡張メソッドによってリテラルからStringクラスのメソッドを呼び出せる。
結合 "abc" + "ABC" 文字列結合演算子
大文字化 s.ToUpper()
小文字化 s.ToLower()
文字分割 s.split('/') 戻り値はstring型の配列
部分文字列 s.Substring(5,10) 指定した位置の文字を取得。
例の場合、5文字目から10文字分の文字列を返す。
トリム s.Trim()
s.TrimStart() 文字列の先頭にある空白をトリミングする。
s.TrimEnd() 文字列の末尾にある空白をトリミングする。
等価比較 s == "文字列"
s.Equals("文字列") 激しく非推奨 (下記参照)
不等価比較 s != "文字列"
大小比較
先頭比較 s.StartWith("My") 文字列が先頭の文字にマッチするか。
末尾比較 s.EndWith("Test") 文字列が最後の文字にマッチするか。
空文字判定
文字検索 s.IndexOf("Program") 文字列にマッチした最初の位置を返す
置き換え s.Replace("Before","After") 置換処理後の文字列を返す
左寄せ(右埋め) s.PadLeft(10) 指定した文字数になるように空白で右側(左側)を埋めた文字列を返す
右寄せ(左埋め) s.PadRight(10)

文字列の等価比較

文字列はstring型(または、ボックス化によりString型)であるため、等価比較を行うにあたって2つの方法が存在する。

  • ==演算子による方法
  • Object.Equals()による方法

string型はイミュータブルなので、==演算子を使用できる。

Object.Equals()でも等価比較が可能だが、ボックス化によるパフォーマンス低下とタイプセーフではないという実装上のデメリットが生じる。
特に、タイプセーフでないために対象がObject型ならば何でもEquals()に与えることができてしまうため、文字列以外の型を与えた場合に必ずしも等価でないケースが存在してしまう。

int i = 0;
string s = "0";
 
Console.WriteLine( s == i ); // コンパイルエラー(異なる型を==演算子で比較できない)
Console.WriteLine( s == i.ToString() ); // 明示的にiを文字列へ。 結果はTrue
 
Console.WriteLine( s.Equals(i) ); // False

Javaとは動作が決定的に異なるので、Java経験者は注意が必要です。

正規表現

System.Text.RegularExpressions.Regexを使用する。

static void Main()
  {
    string s =
@"
This is a test program.
you can download it from the following page.
http://www.xxx.yyy/bin/test.exe
If you have any questions about this,
please contact us by sending e-mail to the following address.
support@xxx.yyy
";
 
    // メールアドレス抽出
	Regex email = new Regex(@"\w*@[\w\.]*");
	Console.Write("{0}\n", email.Match(s).Value);

正規表現が複数にマッチした場合は次のようにする。

Match m = null;
for(m = reg.Match(s);m.Success;m = m.NextMatch()) {
	Console.Write("{0}\n", m.Value);
}

対象がスカラー値の場合の書式指定記法

置き換える文字と引数の順番が対応している。{0}は1番目の引数で置き換える。

書式 説明 指定例 表示例
d 数値を表示 {0:d} 1234
dn 任意の桁数で表示。
桁が足りない場合は「0」で埋まる
{0:d4} 0123
c 数値を通貨書式で表示 {0:c} \5,120
n 「,」区切り {0:n} 5,120
x 16進数で表示 {0:x} 4e0c
g 小数点表示 {0:g} 0.1575
f 小数点部の桁固定で表示
デフォルトでは2桁
{0:f} 0.15
fn 小数点部の桁固定数を指定 {0:f5} 178.12466
e 指数形式で表示 {0:e} 1.575e-002
p パーセンテージで表示 {0:p} 15%
数値 桁指定。整数部と小数部は「.」で区切る。 {0:000.000} 057.120
0 数値の表示位置。
例の書式で「123456789」という値を与えた場合は表示例のようになる。
{0:(000)-000-0000} (012)-345-6789

対象が日時の場合の書式指定記法

書式対象のデータ型がDateTimeの場合、書式指定の意味合いが異なるものがあります。

年の指定
y 年。2桁表記。0~99
yy 年。常に2桁での出力。00~99
yyy 年。常に3桁での出力。
yyyy 年。常に4桁での出力。
yyyyy 年。常に5桁での出力。
月の指定
M 月。1~12
MM 月。常に2桁での出力。01~12
MMM 月の省略名で出力
MMMM
日付の指定
d 日付。1~31
dd 日付。常に2桁での出力。01~31
ddd
dddd
時間の指定
h 12時間表記。0~12
hh 12時間表記。常に2桁での出力。00~12
H 24時間表記。0~23
HH 24時間表記。常に2桁での出力。00~23
tt 午前・午後の表示。日本語ロケールの場合は「午前/午後」と表示される。英語の場合は「AM/PM」となる。
分の指定
m 分。0~59
mm 分。常に2桁での出力。00~59
秒の指定
s 秒。0~59
ss 秒。常に2桁での出力。00~59

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集