web-dev-qa-db-ja.com

文字列を列にフォーマットする

このようなものを取るためのクールな方法はあります:

顧客名-市、州-ID 
ボブ・ホワイリー-ハウズビル、TN-322 
マーリー・ウィンチェスター-カリフォルニア州オールドタウン-5653 

次のような形式にフォーマットします。

顧客名-市、州-ID 
ボブ・ホワイリー-ハウズビル、TN-322 
マーリー・ウィンチェスター-カリフォルニア州オールドタウン-5653 

文字列形式のコマンドを使用していますか?

1つが非常に長い場合の対処方法にこだわることはありません。たとえば、これは私で大丈夫だろう:

お客様の名前-市、州-ID 
ボブ・ホワイリー-ハウズビル、TN-322 
マーリー・ウィンチェスター-カリフォルニア州オールドタウン-5653 
スーパータウンパーソン-ロングタウン名、WA- 45648 

コンテキストを提供するため。これに非常によく似た情報を表示するドロップダウンボックスがあります。現在、ドロップダウンでアイテムを作成する私のコードは次のようになっています。

public partial class CustomerDataContract
{
    public string DropDownDisplay
    {
        get
        {
             return  Name + " - " + City + ",  " + State + " - " + ID;
        }
    }
}

これをより良くフォーマットする方法を探しています。何か案は?


これが私がやったことです:

HttpContext.Current.Server.HtmlDecode(
    String.Format("{0,-27} - {1,-15}, {2, 2} - {3,5}", 
    Name, City, State, ID)
    .Replace(" ", " "));

HtmlDecodeは、をドロップダウンリストのフォーマットを削除するスペースに耐えられるスペースに変更します。

36
Vaccano

Console.WriteLineまたはString.Formatを使用して、テキストが占める列の数と配置を指定できます。

// Prints "--123       --"
Console.WriteLine("--{0,-10}--", 123);
// Prints "--       123--"
Console.WriteLine("--{0,10}--", 123);

数字は使用する列の数を指定し、記号は配置を指定します(左揃えの場合は-、右揃えの場合は+)。したがって、使用可能な列の数がわかっている場合、たとえば次のように書くことができます。

public string DropDownDisplay { 
  get { 
    return String.Format("{0,-10} - {1,-10}, {2, 10} - {3,5}"),
      Name, City, State, ID);
  } 
} 

リスト全体(最長の名前など)に基づいて列の数を計算する場合は、事前にその数を取得し、DropDownDisplayにパラメーターとして渡す必要があります。これを自動的に行う方法はありません。

62
Tomas Petricek

Tomasの答えに加えて、C#6以降で文字列補間を使用できることを指摘したいだけです。

// with string format
var columnHeaders1 = string.Format($"|{0,-30}|{1,-4}|{2,-15}|{3,-30}|{4,-30}|{5,-30}|{6,-30}", "ColumnA", "ColumnB", "ColumnC", "ColumnD", "ColumnE", "ColumnF", "ColumnG");

// with string interpolation
var columnHeaders2 = $"|{"ColumnA",-30}|{"ColumnB",-4}|{"ColumnC",-15}|{"ColumnD",-30}|{"ColumnE",-30}|{"ColumnF",-30}|{"ColumnG",-30}";
1
willbush