C#padLeft,不添加垫

时间:2017-09-18 13:05:11

标签: c#

我正在编写一种格式化电话号码的方法,如果初始数组中的数字少于10位,也会在开头添加填充。我只是输入少于10位数的用例,我的方法显然没有添加填充。最常见的错误是使用错误的padcount参数。我确信我错过了一些简单的事情。

public static string CreatePhoneNumber(int[] numbers)
  {
    string numbas = string.Join("", numbers);

    string ammendNumbas = numbas;

    char pad = '0';

    if ( numbas.Length < 10) 
    {
        ammendNumbas = numbas.PadLeft(10, pad);
    }

    string formatString = "(###) ###-####";
    var returnValue = Convert.ToInt64(ammendNumbas)
                 .ToString(formatString.Substring(0,ammendNumbas.Length+4))
                 .Trim();
     return returnValue;
  }

3 个答案:

答案 0 :(得分:6)

当您使用Convert.ToInt64时,您将删除所有填充,因为填充只能应用于字符串。在应用填充之后,您不需要将值转换回整数。

我认为你想要的是:

public static string CreatePhoneNumber(int[] numbers)
{
   Int64 numbas = Convert.ToInt64(string.Join("", numbers));
   return numbas.ToString("(000) 000-0000");
}

答案 1 :(得分:3)

BlueMonk说的是正确的,但你可以使用String.Format

进行填充
  public static string CreatePhoneNumber(int[] numbers)
  {
      string phoneNumberStr = string.Join("", numbers);

      var phoneNumber = Convert.ToInt64(phoneNumberStr);

      return String.Format("{0:(###) ###-####}", phoneNumber);
  }

这未经测试但应该有效。

答案 2 :(得分:1)

当您致电Convert.ToInt64时,前导零的信息将丢失。您可以使用填充字符串表示的子字符串来提取数字组:

public static string CreatePhoneNumber(int[] numbers)
{
    var numberString = string.Join("", numbers);
    var paddedNumbers = numberString.PadLeft(10, '0');
    return $"({paddedNumbers.Substring(0, 3)}) {paddedNumbers.Substring(3, 3)}-{paddedNumbers.Substring(6)}";
}