2009-03-25 9 views
23

सी # का उपयोग कर यूएस फोन प्रारूप [(XXX) XXX-XXXX] का उपयोग कर स्ट्रिंग को प्रारूपित करने का सबसे तेज़ तरीका क्या है?सी # में एक फोन नंबर प्रारूपित करने का सबसे तेज़ तरीका?

मेरा स्रोत प्रारूप एक स्ट्रिंग है।

+0

क्या अपने स्रोत प्रारूप? एक और स्ट्रिंग? सादे संख्या, अन्य पात्र नहीं? – bendewey

उत्तर

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

(123) 456-7890 एक्स 123

+0

मैं उत्सुक हूँ, डबल क्यों। Int.Parse के बजाय पर्स? निश्चित रूप से int तेज है। – Ray

+0

यह प्रदर्शन सबस्ट्रिंग विधि से तुलना कैसे करता है। क्या आपको पता है कि ## - ## ... क्या यह सिर्फ एक सबस्ट्रिंग प्रकार तकनीक के साथ पार्सिंग है? – bendewey

+4

रे, int अतिप्रवाह नहीं होगा? –

2

मैं ग्रहण करेंगे यह होगा:

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

यह मानता है कि आप "1234567890" के रूप में जमा संख्या है और यह होना चाहता हूँ "(123) 456-7890"।

7

यह मानता है कि आप की तरह संग्रहीत अंक की उचित संख्या के साथ फोन नंबर है:

string p = "8005551234"; 

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

में परिणाम होगा यह एक ले जाएगा स्ट्रिंग उदाहरण "246 1377801" के लिए दस अंक किसी भी तरह से स्वरूपित, या यहाँ तक ">> Phone:((246)) 13 - 778 - 01 <<" युक्त, और प्रारूप यह "(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"); 

(स्ट्रिंग वास्तव में दस अंक शामिल नहीं है, तो आप मूल स्ट्रिंग में कोई बदलाव नहीं मिलता है।)

संपादित करें: एक स्ट्रिंग का निर्माण करने के

एक तेज तरीके एक StringBuilder उपयोग करने के लिए है। अंतिम स्ट्रिंग की सटीक लंबाई की क्षमता को सेट करके आप बिना किसी रद्दीकरण के एक ही स्ट्रिंग बफर के साथ काम करेंगे, और ToString विधि बफर को अंतिम स्ट्रिंग के रूप में वापस कर देगी।

मतलब यह है कि स्रोत स्ट्रिंग केवल दस अंक शामिल हैं:

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

हाँ ... कैप्चरिंग/प्रतिस्थापन करने के लिए गैर-अंकों को पट्टी करने के लिए केवल 1 रेगेक्स क्यों नहीं चलाएं? तेज़ नहीं होगा लेकिन यह हेला क्लीनर होगा। –

संबंधित मुद्दे