1

ユーザーがその中に数値を入力できるWPF TextBoxがあります。現在、 TextBox 番号を 3 ポイント ( 0,0など) で区切ることができる文字列形式を探していますが、スラッシュまたはバック スラッシュまたは別の文字でテキストを分離したいです。そして、私たちの数がいくつのポイントを持っているかわかりません。

Linqソリューションなどではなく、文字列形式を探しています。Microsoft のヘルプを読みましたが、どうにもなりません。

サンプル = 123456789 == > 123/456/789 (良い) --- 123,456,789 (悪い)

アップデート :

ありがとうございますが、このstringformat= {}{0:0,0}などのようなものを検索します。つまり、regex、replace、linq、または任意の c# コードなどの文字列関数を使用したくないということです。{#,#} などの文字列を使用したい。投稿の Microsoft リンクを参照してください。問題の文字列を作成する必要があります。

4

3 に答える 3

2

OPがの使用を主張しているようにString.Format

string input; //the input of your textbox
int temp = int.Parse(input); //parse your input into an int

//the Format() adds the decimal points, the replace replaces them with the /
string output = String.Format("{0:0,0}", temp).Replace('.', '/');

ここで重要なステップは、テキスト ボックスのテキストを整数にキャストすることです。これにより、小数点の挿入が簡単になりString.Format()ます。もちろん、解析時にテキストボックスが有効な数値であることを確認する必要があります。そうしないと、例外が発生する可能性があります。


編集

それで...動的な長さの数値があり、静的なフォーマット文字列を使用してそれをフォーマットしたいですか? 不可能だよ。どこかに書式文字列を作成する動的コードが必要です。
正規表現や文字列置換を再度参照することなく、入力番号に応じてフォーマット文字列を作成するコードを次に示します。
このようにして、String.Format()呼び出しは 1 回だけです。おそらく、フォーマット文字列を作成するアルゴリズムを別の場所に配置して、必要な場所から呼び出すことができます。

string input; //the input of your textbox
int temp = int.Parse(input); //parse your input into an int

string customString = "{0:";
string tempS = "";

for (int i = 0; i < input.Length; i++)
{
    if (i % 3 == 0 && i != 0)
    {
        tempS += "/";
    }

    tempS += "#";
}

tempS = new string(tempS.Reverse().ToArray());

customString += tempS;
customString += "}";

string output = String.Format(customString, temp));
于 2013-10-28T10:44:53.347 に答える
2

カスタムを使用できますNumberFormatInfo。次に、 「n」形式指定子ToStringとともに使用します。

NumberFormatInfo nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = "/";
nfi.NumberDecimalDigits = 0;   // otherwise the "n" format specifier adds .00
Console.Write(123456789.ToString("n", nfi));  // 123/456/789
于 2013-10-28T10:02:13.937 に答える