【问题标题】:Format address string - postal code and flat number格式化地址字符串 - 邮政编码和单位号
【发布时间】:2015-05-01 12:47:54
【问题描述】:

我需要在一个字符串中格式化地址。 现在我有如下属性:

public string Street { get; set; }
public string StreetNumber { get; set; }
public string FlatNumber { get; set; }
public string PostalCode { get; set; }
public string City { get; set; }

现在我有

String.Format("{0} {1} / {2} {3} {4}", model.Address.Street, model.Address.StreetNumber, model.Address.FlatNumber, data.Address.PostalCode, data.Address.City);
  1. 邮政编码格式为“xxxxx”(x 是数字)。我想要格式为“xx-xxx”的邮政编码。
  2. Flat number 并不总是存在的,那么如果 flat number 为空字符串,如何隐藏 flat number 和字符 '/' 呢?

【问题讨论】:

  • 邮政编码是否总是一个 5 字符的字符串?如果不是,什么部分在破折号之前,什么部分在后面?
  • IF 语句和更多变量
  • @steve PostalCode 总是有 5 个字符

标签: c# string string.format postal-code


【解决方案1】:

我会使用 {0:00-000} 格式的邮政编码,我会简单地使用额外的变量将平面部分准备为空字符串或其带有斜杠的值。

public class Address
{
  public string Street { get; set; }
  public string StreetNumber { get; set; }
  public string FlatNumber { get; set; }
  public string PostalCode { get; set; }
  public string City { get; set; }

  public override string ToString()
  {
    string flatNumberStr = !string.IsNullOrEmpty(FlatNumber) ? " / " + FlatNumber : "";
    return string.Format("{0} {1}{2} {3:00-000} {4}", Street, StreetNumber, flatNumberStr, int.Parse(PostalCode), City);

  }
}

private static void Main(string[] args)
{
  Address addr1 = new Address()
  {
    Street = "Some Street",
    StreetNumber = "123",
    FlatNumber = "F3",
    PostalCode = "54897",
    City = "Big City"
  };

  Address addr2 = new Address()
  {
    Street = "Other Street",
    StreetNumber = "12B",
    PostalCode = "06816",
    City = "Smaller City"
  };

  Console.WriteLine(addr1.ToString());
  Console.WriteLine(addr2.ToString());
}

这段代码输出是:

Some Street 123 / F3 54-897 Big City

Other Street 12B 06-816 Smaller City

现在请注意,该代码仅在 PostalCode 为数字时才有效。所以在调用 ToString 方法之前一定要检查一下。

如果你不确定它的实际值,但你确定会有 5 个“数字”,说“1234A”是一个有效的邮政编码,那么使用

{3:##-###} 

而不是那个

{3:00-000}

【讨论】:

    【解决方案2】:

    你可以这样做:

    String.Format("{0} {1} {2} {3}-{4} {5}", 
        model.Address.Street, 
        model.Address.StreetNumber, 
        (!string.IsNullOrEmpty(model.Address.FlatNumber ? '/ ' + model.Address.FlatNumber : ""), 
        data.Address.PostalCode.Substring(0, 2), 
        data.Address.PostalCode.Substring(2), 
        data.Address.City);
    

    有几点需要指出:

    1. 我从您的格式字符串中删除了斜杠 /,并使用 ternary operator 添加了一条语句

      (!string.IsNullOrEmpty(model.Address.FlatNumber ? "/ " + model.Address.FlatNumber : "")

    这将检查FlatNumber 是否为空,如果不是,则使用/,后跟FlatNumber,如果是,则仅使用一个空字符串。

    1. 我为您的格式添加了一个附加索引,即{3}-{4},用于邮政编码。然后相关的语句将提取部分邮政编码在破折号-之前和之后:

      data.Address.PostalCode.Substring(0, 2) //before the dash data.Address.PostalCode.Substring(2) //after the dash

    【讨论】:

    • 那些应该是双引号 "/ " 所以它将是一个字符串。
    【解决方案3】:

    试试这个

            private string postalCode = "";
            public string PostalCode
            {
                get{return postalCode.Substring(0,2) + "-" + PostalCode.Substring(2);}
                set { postalCode = value.Replace("-",""); }
            }

    【讨论】:

      猜你喜欢
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多