文字列
最終更新:
atachi
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 |