在 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)))
但不幸的是,这只返回字符串本身。 我看到"(###( ###-####"。
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()
否则格式中的#
将不知道要操作什么。