管理c#中同一字符串中两个单词之间的空格

本文关键字:两个 单词 空格 之间 字符串 管理 | 更新日期: 2023-09-27 18:12:06

我有一个字符串列表,我在其中动态添加位置和邮政编码,

和我填充该列表在文本框与滚动条。但是位置和邮政编码之间有空格根据位置长度

例如:

   Chicago     60016
   Niles     12332
   San Francisco 95858

我想要的是

  Chicago       60016
  Niles         12332
  San Francisco 95858
下面是我的代码:
var List<string> CityZip = new List<string>();
foreach(var item in CollectionofCityZip)
{
  CityZip.Add(item.City + "    " + item.Zip);
}

我试过了CityZip.Add(item.City.PadRight(14) + item.Zip);

它给了我:

   Chicago     60016
   Niles     12332
   San Francisco    95858

但是我想

  Chicago       60016
  Niles         12332
  San Francisco 95858

管理c#中同一字符串中两个单词之间的空格

如果您使用WPF,您可以为Listbox指定一个类似这样的项模板:

<ListBox.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="{Binding Data}"></TextBlock>
            <TextBlock Grid.Column="1" Text="x"></TextBlock >
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>

如果您使用的是Winforms,使用具有可变空格数的等宽字体是最简单的解决方案。或者,您也可以自己绘制条目。

有关MSDN

相关所以

如果您使用的是等宽字体(每个字母的宽度相同),那么您可以使用内置的PadRight函数,该函数将用空格填充字符串,使其成为您指定的长度:

CityZip.Add(item.City.PadRight(14) + item.Zip);

注意这里的14是任意的。如果你想要正确排列,你需要先扫描列表,看看最长的字符串有多长,然后填充到这个长度。像这样的代码应该可以工作:

const int extraPadding = 1; // how much space to put after the longest entry
int maxLen = CollectionOfCityZip.Select(item => item.City.Length).Concat(new[] {0}).Max();
CityZip.Add(item.City.PadRight(maxLen + extraPadding) + item.Zip);

c# 6.0:

   CityZip.Add($"{item.City,-14}{item.Zip}");

C # & lt;6.0:

   CityZip.Add(string.Format("{0,-14}{1}", item.City, item.Zip));