C#/.NET में स्ट्रिंग फॉर्मेट करने के दो मुख्य तरीके हैं: String.Format() का इस्तेमाल, और स्ट्रिंग इंटरपोलेशन।
String.Format() एक स्ट्रिंग लेता है (डॉक्यूमेंटेशन में इसे कंपोज़िट फॉर्मेट कहा जाता है) जिसमें तय टेक्स्ट और प्लेसहोल्डर (डॉक्यूमेंटेशन में इन्हें फॉर्मेट आइटम कहा जाता है) होते हैं, और साथ में अलग-अलग संख्या में आर्गुमेंट। लौटाई गई वैल्यू हर फॉर्मेट आइटम को उसके संबंधित आर्गुमेंट से भर देती है, और फिर इन भरी गई वैल्युओं को तय टेक्स्ट के साथ जोड़ देती है।
string.Format("I had {0} bitcoins on {1}, the day I forgot my password.", 55.5, new DateTime(2010, 2, 25));
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings
तकनीकी रूप से इस तरीके को कंपोज़िट फॉर्मेटिंग कहा जाता है।
इंटरपोलेटेड स्ट्रिंग के आगे $ लगाया जाता है और इसमें ब्रैसिज़ के अंदर रन-टाइम एक्सप्रेशन होते हैं। फॉर्मेट आइटम का सिंटैक्स इस तरह होता है: $"{<interpolationExpression>}". इससे आर्गुमेंट की अलग सूची बनाने की ज़रूरत नहीं रहती। परिणाम काम करने के तरीके से String.Format() वाले तरीके जैसा ही होता है।
var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf} bitcoins on {thatDay}, the day I forgot my password."
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings
ब्रैसिज़ के अंदर का टेक्स्ट, यानी कंपोज़िट फॉर्मेट में प्लेसहोल्डर और स्ट्रिंग इंटरपोलेशन में इंटरपोलेटेड एक्सप्रेशन, फॉर्मेट आइटम कहलाता है।
एक फॉर्मेट आइटम में अधिकतम 3 भाग हो सकते हैं। पहला है ज़रूरी एक्सप्रेशन या आर्गुमेंट प्लेसहोल्डर, जैसा ऊपर के उदाहरण कोड में दिखता है। इसके अलावा एक वैकल्पिक अलाइनमेंट (जो कॉमा "," से शुरू होता है) और एक वैकल्पिक फॉर्मेट स्ट्रिंग (जो कोलन ":" से शुरू होती है) हो सकती है।
{<interpolationExpression>[,<alignment>][:<formatString>]}
अलाइनमेंट उस "फील्ड" की लंबाई बताता है जिसमें टेक्स्ट रखा जाता है। अगर अलाइनमेंट धनात्मक है तो बाईं ओर स्पेस से पैडिंग की जाती है, और अगर ऋणात्मक है तो दाईं ओर।
फॉर्मेट स्ट्रिंग यह तय करती है कि आउटपुट टेक्स्ट कैसा दिखेगा, जैसे किसी संख्या में हज़ारों का सेपरेटर लगाना है या नहीं, या DateTime ऑब्जेक्ट का सिर्फ डेट वाला हिस्सा दिखाना है या नहीं।
नीचे दिया गया कोड दिखाता है कि DateTime ऑब्जेक्ट के डेटा वाले हिस्से और एक दशमलव संख्या को एक्सपोनेंशियल रूप में कैसे दिखाया जाता है।
var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf:E} bitcoins on {thatDay:d}, the day I forgot my password."
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings
string.Format(
"I had {0:E} bitcoins on {1:d}, the day I forgot my password.",
loadsOf, thatDay)
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings
संख्याओं और डेट, दोनों के लिए स्टैंडर्ड और कस्टम फॉर्मेटिंग दोनों मौजूद हैं। कस्टम और स्टैंडर्ड में कोई बड़ा अंतर नहीं है, बस इतना कि आपको फॉर्मेट अक्षरों से अपनी कस्टम फॉर्मेट स्ट्रिंग जोड़ने का अवसर मिलता है।
हर थ्रेड का एक डिफ़ॉल्ट कल्चर होता है, Thread.CurrentThread.CurrentCulture, जो CultureInfo के एक इंस्टेंस के अंदर समाया रहता है। थ्रेड का कल्चर तय करता है कि डेट और संख्याएँ क्षेत्रीय अंतरों के अनुसार कैसे फॉर्मेट होंगे, जैसे ब्रिटेन के DD/MM/YYYY और अमेरिका के MM/DD/YYYY पारंपरिक डेट फॉर्मेट के बीच का अंतर।
CultureInfo, IFormatProvider इंटरफ़ेस को लागू करता है, जिसे String.Format() के कुछ ओवरलोड को पास किया जा सकता है। इसका इस्तेमाल थ्रेड के कल्चर को बदलने के लिए किया जा सकता है।
वर्बेटिम स्ट्रिंग से कई लाइनों वाली स्ट्रिंग बनाई जा सकती हैं। इनके आगे @ लगाया जाता है।
string str = @"
See no wretched
quotes everywhere
";
इस अभ्यास में आप हाई स्कूल के प्रेमी जोड़ों को सोशल मीडिया पर अपना प्यार जताने में मदद करेंगे।
कृपया स्टैटिक HighSchoolSweethearts.DisplaySingleLine() मेथड बनाइए, जो दो नाम लेता है और उन्हें बीच में दिल रखकर प्रदर्शित करता है।
फॉर्मेट किए गए टेक्स्ट की चौड़ाई 61 अक्षर होनी चाहिए और दिल स्ट्रिंग के ठीक बीच में होना चाहिए।
सभी नाम निश्चित रूप से लाइन की चौड़ाई में आसानी से समा जाएँगे।
HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => " Lance Green ♡ Pat Riley "
स्टैटिक HighSchoolSweethearts.DisplayBanner() मेथड बनाइए, जो दोनों नामों के पहले अक्षरों को धन चिह्न से अलग करके प्रदर्शित करता है।
HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
****** ******
** ** ** **
** ** ** **
** * **
** **
** L. G. + P. R. **
** **
** **
** **
** **
** **
** **
***
*
स्टैटिक HighSchoolSweethearts.DisplayGermanExchangeStudents() मेथड बनाइए, जो हमारे जर्मन एक्सचेंज छात्रों के लिए रिश्ते की शुरुआत की तारीख और उसकी अवधि प्रदर्शित करता है।
HighSchoolSweethearts.DisplayGermanExchangeStudents("Norbert", "Heidi", new DateTime(2019, 1, 22), 1535.22f);
// => "Norbert and Heidi have been dating since 22.01.2019 - that's 1.535,22 hours"
Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।