String.Format()-如何使用包含格式的变量?

时间:2019-07-11 19:00:07

标签: vb.net string.format

在vb.net中,我试图将字符串格式化为格式化的电话号码,然后从数据库变量中读取格式化。

如果将字符串格式化为以下格式,则“ 5555555555”之类的电话号码将很好地格式化为“(555)555-5555”:

String.Format("{0:(###) ###-####}", Long.Parse(PhoneNum))

但是,“(###)###-####”字符串存储在数据库中,以维护理论系统中电话号码的集中格式选择。

有人知道我如何用变量替换这种硬编码格式吗?我正在尝试类似的东西:

Dim phoneFormat as String = <~read in the String format from DB~>
String.Format("{0:" & phoneFormat.ToString & "}", Long.Parse(PhoneNum)))

但是,不幸的是,这仅返回字符串本身。出现“(###)###-####”。

1 个答案:

答案 0 :(得分:2)

Object.ToString可能更简单,但是您仍然可以使用String.Format。这是这两种方法

Dim phoneNum = "1234567890"
Dim phoneFormat = "(###) ###-####"
' simpler version using Long.ToString
Dim formattedPhoneNumber1 = Long.Parse(phoneNum).ToString(phoneFormat)
' your original attempt using String.Format
Dim formattedPhoneNumber2 = String.Format("{0:" & phoneFormat & "}", Long.Parse(phoneNum))
' cleaner version using String.Format with traditional interpolation and $ interpolation
Dim formattedPhoneNumber3 = String.Format($"{{0:{phoneFormat}}}", CLng(phoneNum))
Console.WriteLine(formattedPhoneNumber1)
Console.WriteLine(formattedPhoneNumber2)
Console.WriteLine(formattedPhoneNumber3)
Console.ReadLine()
  

(123)456-7890
  (123)456-7890
  (123)456-7890

我认为您可能没有将Long发送到函数中,而是将字符串发送了(顺便问为什么数字5555555555首先存储为字符串?)。您需要包含Long.Parse(),否则格式的#会导致无法操作。