2009-03-25 18 views

Répondre

43
String.Format("{0:(###) ###-#### x ###}", double.Parse("1234567890123")) 

Entraînera (123) 456-7890 x 123

+0

Je suis curieux, pourquoi le double.Parse au lieu de l'int.Parse? Sûrement int est plus rapide. – Ray

+0

Comment cette performance se compare-t-elle à la méthode de sous-chaîne? Savez-vous si le ## - ## ... est-il juste en train d'analyser avec une technique de type sous-chaîne? – bendewey

+4

Ray, ne déborderait pas int? –

2

Je suppose que ce serait:

var number = string.Format("({0}) {1}-{2}", oldNumber.Substring(0, 3), oldNumber.Substring(3, 3), oldNumber.Substring(6)); 

Cela suppose que vous avez le numéro enregistré comme « 1234567890 » et que vous voulez qu'il soit « (123) 456-7890 ».

7

Cela suppose que vous avez le numéro de téléphone avec le nombre approprié de chiffres stockés comme:

string p = "8005551234"; 

string formatedPhoneNumber = string.Format("({0}) {1}-{2}", p.Substring(0, 3), p.Substring(3, 3), p.Substring(6, 4)); 
4

Cela prendra chaîne contenant dix chiffres formatés de quelque manière que, par exemple "246 1377801" ou même ">> Phone:((246)) 13 - 778 - 01 <<", et le format comme "(246) 137-7801":

string formatted = Regex.Replace(
    phoneNumber, 
    @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*$", 
    "($1$2$3) $4$5$6-$7$8$9$10"); 

(Si la chaîne ne contient pas exactement dix chiffres, vous obtenez la chaîne d'origine inchangé.)

Edit:

Une façon rapide pour construire une chaîne est d'utiliser un StringBuilder. En définissant la capacité sur la longueur exacte de la chaîne finale, vous travaillerez avec le même tampon de chaîne sans aucune réaffectation, et la méthode ToString retournera le tampon lui-même en tant que chaîne finale.

Cela suppose que la chaîne source ne contient que les dix chiffres:

string formatted = 
    new StringBuilder(14) 
    .Append('(') 
    .Append(phoneNumber, 0, 3) 
    .Append(") ") 
    .Append(phoneNumber, 3, 3) 
    .Append('-') 
    .Append(phoneNumber, 6, 4) 
    .ToString(); 
+0

Yow ... pourquoi ne pas simplement exécuter 1 regex pour enlever les non-chiffres et une seconde pour faire la capture/le remplacement? Ne serait pas aussi rapide mais ce serait plus propre. –

Questions connexes