0

私はC#メソッドを作成してい
ます。1。文字列を取得します
。2。その文字列をCurrency(10進数またはセントなし)としてフォーマットし、それを返します。

String.Format書式設定は優れていますが、その書式設定は、値を印刷または出力する場合にのみ適用されます。コードをステップスルーすると、実際に文字列に保存されている値がフォーマットされていないことがはっきりとわかります。しかし、私はそれをフォーマットする必要があります。そして、それはあなたの助けが必要なところです。

上記のステップ1では、入力される文字列は3つの可能な形式のいずれかに分類されます。(以下では、「」を使用して文字列の開始と終了を指定しています。「」は実際には文字列の一部ではありません。)
1。「<5000」
2。「5000-10000」
3。「>1000」

これらの3つの例では、メソッドは
1. "<$ 5,000"
2. "$ 5,000-$ 10,000"
3. ">$10,000"を出力する必要があります。

基本的に、メソッドは必要に応じて$とを追加する必要があります(これString.Formatはうまくいきます)。<、>、-の追加など、残りのフォーマットは簡単です。これを手動で行う方法を作成することはできますが、もっと簡単な方法が必要です。

4

3 に答える 3

7

念のため、結果をどこかに割り当てていますよね?String.Format

string result = String.Format("<{0}>", 123);

.NETの文字列は不変であるため、関数は既存の文字列を変更するのではなく、常に新しい文字列を作成します。また、「印刷と出力」は決して魔法のようなものではないため、後で結果を出力するときに関数の動作が異なることはありません。

于 2012-12-31T15:49:22.683 に答える
6

string.Format文字列を変更しませんが、まったく新しいインスタンスを返します。次の方法で変数に割り当てることができます。

var newString = string.Format("{0} is my format", oldString);

Regex生の文字列のみがあり、その中に値がない場合は、で問題を解決できます。これはあなたが持ってきた3つの例にのみ当てはまりますが、パターンを変更することでそれを適応させることができます。

編集:コンマが適用されないことに気づきましたが、目的の出力に一致するようにパターンを変更してみることができます。これで、作成者の要求どおりに機能します。

string[] samples =
{
    "<5000",
    "5000-10000",
    ">10000"
};
var results = samples.
    Select(s => Regex.Replace(s, @"\d+",
        m => Convert.ToInt32(m.Value).ToString("$#,#"))).
    ToArray();
于 2012-12-31T15:48:42.227 に答える
0

(私のコメントからコピー)

すでに文字列変数がある場合は、次のように呼び出しますs

string.Format( /* something with s in it */ )

自分自身を変更しませんs。次のように、再割り当てすることをお勧めします

s = string.Format( /* something with s in it */ )

ここで、右側では「古い」sオブジェクトが使用され、の結果がFormat「保存」されsて新しいになりsます。

ただし、文字列を通貨としてString.Formatフォーマットすることはできないことに注意してください。数値(aやaなど)を通貨としてフォーマットできますが、文字列を取得すると、またはのようなフォーマットは文字列出力の変更に役立ちません。decimaldouble{0:C}{0:C0}

于 2013-01-01T02:26:18.040 に答える