2014-03-24 141 views
0

我正在嘗試使用this answer中提供的解決方案,並且還引用this article如何在字符串中使用佔位符作爲字符?

基本上,我試圖格式化一個社會安全號碼。這是上面鏈接的文章中使用的方法:

String.Format(「{0:###-##-####}」, 123456789); 

當數按如上所示傳遞這個偉大的工程,但我需要的格式數字符串中包含的 - 所以我基本上是這樣做(這不起作用):

String.Format(「{0:###-##-####}」, "123456789"); 

什麼是解決我的問題的好方法?

+3

您是否考慮過在應用格式化之前將字符串轉換爲int? –

回答

3

可以解析字符串到數字類型,然後使用string.Format,如:

String.Format("{0:###-##-####}", long.Parse("123456789")); 

您還可以使用基於你的電話號碼long.TryParseint.TryParse,然後使用的String.format該值。

long number; 
string str = "123456789"; 
if (!long.TryParse(str, out number)) 
{ 
    //invalid number 
} 

string formattedStr = String.Format("{0:###-##-####}", number); 
+0

如果SSN有字母怎麼辦? –

+0

你怎麼知道這是SSN? – Habib

+0

雖然我不確定這是否是相關用例。 –

0

你可以嘗試打印單個字符

string.Format("{0}{1}{2}", "123".ToCharArray().Cast<object>().ToArray()) 

修改這個代碼,以支持SSN的可變長度(如果有必要 - 在運行時建立的格式字符串)。

0

SSN通常存儲在varchar中。如果是這樣,您可以使用像這種實用方法。

public static string FormatSSN(string ssn) 
{ 
    if (String.IsNullOrEmpty(ssn)) 
     return string.Empty; 

    if (ssn.Length != 9) 
     return ssn; 

    string first3 = ssn.Substring(0, 3); 
    string middle2 = ssn.Substring(6, 2); 
    string last4 = ssn.Substring(5, 4); 

    return string.Format("{0}-{1}-{2}", first3, middle2, last4); 
} 
1

您可以使用Regex.Replace方法

string formatted = Regex.Replace("123456789", @"(.{3})(.{2})(.{4})", "$1-$2-$3"); 

鑑於你有沒有那麼多的數字(或字母),您可以使用多個點。

string formatted = Regex.Replace("123456789", @"(...)(..)(....)", "$1-$2-$3"); 
+0

是的,即使號碼由字母和數字的組合組成,它也可以工作。 –

相關問題