【C#】文字列(String)の扱いについて

数値を様々な書式でフォーマットで出力

* string.Format()を使用する

例1-1:0埋めのファイル名を指定したい場合

int num = 12;
string str = string.Format("FileName{0:D6}.txt", num); // str = "FileName000012.txt";

例1-2:0埋めのファイル名を指定したい場合(別例 : PadLeft())

string tempStr = "123";
// 8文字になるまで先頭を半角スペースで埋める
string str1 = tempStr .PadLeft(8); // str = "000000123";
// 8文字になるまで先頭を半角スペースで埋める
string str2 = tempStr .PadLeft(10, '0'); // str = "00000000123";

参考資料

http://jeanne.wankuma.com/tips/csharp/string/padleft.html

例1-3:空白埋めのファイル名を指定したい場合

string str1 = string.Format("{0, 8}", "ABC"); // str1 = "     ABC";

string str2 = string.Format("{0, -8}", "ABC"); // str2 = "ABC     ";

参考資料

http://www.atmarkit.co.jp/fdotnet/dotnettips/116formatint/formatint.html

例2:日付の出力をyyyy/MM/ddで出力する

string str = string.Format("Today's date : {0:yyyy/MM/dd}", DateTime.Now);

例3:数値を文字列を四捨五入して出力する

double num = 123.5956;
this.label1.Text = num.ToString(string.Format("f{0}", 2)); // 「123.60」と出力

num = 123.3256;
this.label2.Text = num.ToString(string.Format("0.{0}",new string('0', 3))); // 「123.326」と出力

参考資料

http://homepage3.nifty.com/midori_no_bike/CS/numstr.html

例4:3桁のカンマ区切り(小数点桁数4桁)

double num = 1234567890.12;
this.label1.Text = num.ToString(string.Format("{0:N4}", num)); // 「1,234,567,890.1200」と出力

参考資料

http://ameblo.jp/only-human/entry-10077320189.html
http://msdn.microsoft.com/ja-jp/library/241ad66z
http://msdn.microsoft.com/ja-jp/library/7x5bacwt


文字切り出し

構文

 * String.Substring(開始位置, 終了位置):開始位置から最終位置までを戻り値として返す
 * String.Substring(開始位置):開始位置から最終までを戻り値として返す

文字挿入

構文

String.Insert(挿入位置, 挿入文字):挿入位置に挿入文字を戻り値として返す

文字列連結

* 「+」でもできるけど、String.Concat()もある
http://dobon.net/vb/dotnet/string/concat.html

構文

String.Concat(文字列1, 文字列2, ...):文字列連結を戻り値として返す

From Framework4

コレクションの各要素を事前に文字列に変換することなく連結できるようになった

List<int> list = new List<int> { 1, 2, 3, };
string lists = string.Concat(list);
this.label1.Text = lists + " Da-"; // "123 Da-"が出力

文字列配列内の文字列を連結

* string.Join()メソッドを使用する
* 例のように配列やリストから、SQL文を作成するなどに使える

構文

result = string.Join(区切り文字列, 文字列配列)

string[] idList = {"001", "003", "004"};

string sql = "SELECT * FROM testTable WHERE id in ("
 + string.Join(",", idList.ToArray())
 + ")"; // "SELECT * FROM testTable WHERE id in (001,003,004)"が出力

参考文献

http://www.atmarkit.co.jp/fdotnet/dotnettips/366join/join.html

From Framework4

コレクションの各要素を事前に文字列に変換することなく連結できるようになった

List<int> list = new List<int> { 1, 2, 3, };
string lists = string.Join(", ", list);
this.label1.Text = lists + " Da-"; // "1, 2, 3 Da-"が出力

パース処理

構文

String.Split([デリミッター]):引数を基準にデータごとに切り離す

string[] data = csvDatas.Split(',');

文字列判定

* string.StartsWith()・EndsWith()メソッドを使用する

サンプルプログラム

単語が母音だったら「An」それ以外なら「A」を付加して表示する

* 正規表現やList.Exists()でもできると思うけど...
http://blogs.yahoo.co.jp/dk521123/22295813.html
private void button11_Click(object sender, EventArgs e)
{
    List<string> list = new List<string>()
    {
        "A", "a", "I", "i", "U", "u", "E", "e", "O", "o",
    };
    bool flag = false;

    foreach(var value in list)
    {
        if (this.textBox1.Text.StartsWith(value))
        {
            flag = true;
            break;
        }
    }

    if (flag)
    {
        this.label2.Text = "An " + this.textBox1.Text;
    }
    else
    {
        this.label2.Text = "A " + this.textBox1.Text;
    }
}

その他

改行文字

System.Environment.NewLine