1. पात्रों के भागने का कारण

एक बार आपने सीखा कि कोड में वर्णों की एक स्ट्रिंग लिखने के लिए, आपको उन्हें दोहरे उद्धरण चिह्नों में लपेटने की आवश्यकता है। परिणाम एक स्ट्रिंग शाब्दिक है ।

लेकिन अगर हमें स्ट्रिंग शाब्दिक के अंदर उद्धरण चिह्नों की आवश्यकता है तो हम क्या करते हैं? उद्धरण वाली एक स्ट्रिंग - क्या आसान हो सकता है?

मान लीजिए कि हम टेक्स्ट प्रदर्शित करना चाहते हैं "Friends" was nominated for an "Oscar"। आप उसे कैसे करते हैं?

कोड टिप्पणियाँ
String s = ""Friends" was nominated for an "Oscar"";
यह विकल्प काम नहीं करेगा!

मुद्दा यह है कि संकलक सोचता है कि आप पूरी तरह अप्रत्याशित कोड लिख रहे हैं:

कोड टिप्पणियाँ
String s = ""Friends" was nominated for an "Oscar"";
यह विकल्प काम नहीं करेगा!

संकलक द्वारा कोड में दोहरे उद्धरण चिह्नों का सामना करने के बाद, यह एक स्ट्रिंग शाब्दिक की शुरुआत के रूप में निम्नानुसार व्यवहार करता है। अगला दोहरा उद्धरण चिह्न स्ट्रिंग शाब्दिक के अंत को इंगित करता है।

तो आप शाब्दिक के अंदर डबल कोट्स कैसे लिखते हैं?


2. पात्रों से बचना

एक रास्ता है। इसे एस्केपिंग कैरेक्टर कहते हैं । आप बस पाठ के तार के भीतर उद्धरण चिह्न लिखें। और उद्धरण से पहले, आप \( बैकस्लैश ) प्रतीक जोड़ते हैं।

ठीक से लिखे जाने पर स्ट्रिंग शाब्दिक ऐसा दिखता है:

कोड टिप्पणियाँ
String s = "\"Friends\" was nominated for an \"Oscar\"";
यह काम करेगा!

कंपाइलर सब कुछ सही ढंग से व्याख्या करेगा और बैकस्लैश के बाद उद्धरण चिह्न को सामान्य उद्धरण चिह्न नहीं मानेगा।

क्या अधिक है, यदि आप इस स्ट्रिंग को स्क्रीन पर आउटपुट करते हैं, तो बैकस्लैश वाले उद्धरणों को सही ढंग से संसाधित किया जाएगा, और टेक्स्ट बिना किसी बैकस्लैश के प्रदर्शित होगा:"Friends" was nominated for an "Oscar"

एक और महत्वपूर्ण बिंदु। बैकस्लैश से पहले एक उद्धरण चिह्न एक वर्ण का प्रतिनिधित्व करता है: हम केवल स्लीक नोटेशन का उपयोग कर रहे हैं जो हमारे कोड में स्ट्रिंग अक्षर को पहचानने की कंपाइलर की क्षमता में हस्तक्षेप नहीं करता है। आप एक charचर के लिए उद्धरण निर्दिष्ट कर सकते हैं:

कोड टिप्पणियाँ
char c = '\"';
\"एक वर्ण है, दो नहीं
char c = '"';
यह भी संभव है: सिंगल कोट्स के अंदर एक डबल कोटेशन मार्क

3. पात्रों से बचते समय होने वाली सामान्य स्थितियाँ

सामान्य परिस्थितियाँ जिनमें भागने वाले पात्र शामिल होते हैं

दोहरे उद्धरण चिह्नों के अलावा, कई अन्य वर्ण हैं जिन्हें संकलक एक विशेष तरीके से संभालता है। उदाहरण के लिए, एक पंक्ति विराम।

हम लिटरल में लाइन ब्रेक कैसे जोड़ सकते हैं? इसके लिए एक खास कॉम्बिनेशन भी है:

\n
लाइन ब्रेक कैरेक्टर

यदि आपको एक स्ट्रिंग शाब्दिक में एक पंक्ति विराम जोड़ने की आवश्यकता है, तो आपको केवल कुछ वर्ण जोड़ने की आवश्यकता है \n:।

उदाहरण:

कोड कंसोल आउटपुट
System.out.println("Best regards, \n Anonymous");
             
Best regards,
Anonymous

इस तरह के कुल 8 विशेष संयोजन हैं, जिन्हें एस्केप सीक्वेंस भी कहा जाता है । वे यहाँ हैं:

कोड विवरण
\t एक टैब वर्ण डालें
\b बैकस्पेस कैरेक्टर डालें
\n एक न्यूलाइन कैरेक्टर डालें
\r कैरिज रिटर्न कैरेक्टर डालें
\f एक पृष्ठ फ़ीड वर्ण डालें
\' एकल उद्धरण चिह्न डालें
\" दोहरा उद्धरण चिह्न डालें
\\ बैकस्लैश डालें

आप उनमें से दो से परिचित हैं, लेकिन अन्य छह का क्या मतलब है?

\tएक टैब वर्ण है

जब यह पाठ पाठ में प्रकट होता है, तो यह Tabटाइप करते समय कुंजी दबाने के बराबर होता है। यह उस पाठ को बदलता है जो उसके बाद आता है और पाठ को संरेखित करना संभव बनाता है।

उदाहरण:

कोड कंसोल आउटपुट
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bका अर्थ है 'एक वर्ण वापस जाओ'

एक स्ट्रिंग में यह क्रम Backspaceकीबोर्ड पर की को दबाने के बराबर है। यह उस चरित्र को हटा देता है जो इससे पहले होता है:

कोड कंसोल आउटपुट
System.out.println("Hello\b\b World");
Hell World!

\rकैरिज रिटर्न कैरेक्टर है

यह वर्ण पाठ को बदले बिना कर्सर को वर्तमान पंक्ति की शुरुआत में ले जाता है। आगे जो कुछ भी प्रदर्शित होता है वह मौजूदा स्ट्रिंग को अधिलेखित कर देगा।

उदाहरण:

कोड कंसोल आउटपुट
System.out.println("Greetings\r World!");
World!

\fएक पेज फीड कैरेक्टर है

यह प्रतीक पहले डॉट मैट्रिक्स प्रिंटर के दिनों से हमारे पास आता है। इस अनुक्रम को एक प्रिंटर पर आउटपुट करने से प्रिंटर बिना किसी टेक्स्ट को प्रिंट किए, बिना किसी नए पेज के शुरू होने तक, बस वर्तमान शीट को फीड कर देगा।

अब हम इसे पृष्ठ विराम या नया पृष्ठ कहेंगे ।

\\एक बैकस्लैश है

यहाँ सब कुछ सीधा है। यदि हम अपने पाठ में वर्णों से बचने के लिए बैकस्लैश का उपयोग करते हैं, तो हम स्ट्रिंग में बैकस्लैश वर्ण कैसे लिखेंगे?

यह सरल है: पाठ में एक बैकस्लैश जोड़ें — आपको एक पंक्ति में दो लिखना होगा।

उदाहरण:

कोड कंसोल आउटपुट
System.out.println("c:\projects\my\first");
अज्ञात भागे हुए पात्रों के लिए संकलक आप पर चिल्लाएगा।
System.out.println("c:\\projects\\my\\first");
यह कैसे ठीक किया गया है!


4. यूनिकोड एन्कोडिंग

जैसा कि आप पहले से ही जानते हैं, स्क्रीन पर प्रदर्शित प्रत्येक वर्ण एक विशिष्ट संख्यात्मक कोड से मेल खाता है। इन कोडों के एक मानकीकृत सेट को एन्कोडिंग कहा जाता है ।

एक बार की बात है, जब कंप्यूटर का आविष्कार किया गया था, तो सात बिट (एक बाइट से कम) हर वर्ण को एनकोड करने के लिए पर्याप्त थे। पहले एन्कोडिंग में केवल 128 अक्षर थे। इस एन्कोडिंग को ASCII कहा जाता था ।

ASCII का अर्थ अमेरिकन स्टैंडर्ड कोड फॉर इंफॉर्मेशन इंटरचेंज है - प्रिंट करने योग्य वर्णों और कुछ विशेष कोड के लिए एक मानक अमेरिकी कोड तालिका।

इसमें 33 गैर-मुद्रण योग्य नियंत्रण वर्ण होते हैं (जो पाठ और रिक्त स्थान को संसाधित करने के तरीके को प्रभावित करते हैं) और 95 मुद्रण योग्य वर्ण, जिनमें संख्याएँ, अपरकेस और लोअरकेस लैटिन अक्षर और कई विराम चिह्न शामिल हैं।

यूनिकोड एन्कोडिंग

जैसे-जैसे कंप्यूटरों की लोकप्रियता बढ़ती गई, प्रत्येक देश ने अपनी स्वयं की एन्कोडिंग जारी करना शुरू कर दिया। आमतौर पर, उन्होंने ASCII को एक शुरुआती बिंदु के रूप में लिया और शायद ही कभी इस्तेमाल किए जाने वाले ASCII वर्णों को उनके संबंधित अक्षर से प्रतीकों के साथ बदल दिया।

समय के साथ, एक विचार उभरा: एक एकल एन्कोडिंग बनाएं जिसमें दुनिया के प्रत्येक एन्कोडिंग के सभी वर्ण शामिल हों।

यूनिकोड एन्कोडिंग 1

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

हालांकि यूनिकोड ही मानक है, इसके कई प्रतिनिधित्व या यूनिकोड परिवर्तन प्रारूप (UTF) हैं: UTF-8, UTF-16 और UTF-32, आदि।

जावा यूनिकोड एन्कोडिंग के एक उन्नत संस्करण का उपयोग करता है - UTF-16: प्रत्येक वर्ण 16 बिट्स (2 बाइट्स) में एन्कोड किया गया है। इसमें अधिकतम 65,536 वर्ण हो सकते हैं!

आप इस एन्कोडिंग में दुनिया के हर अक्षर के लगभग हर अक्षर को पा सकते हैं। स्वाभाविक रूप से, किसी को भी पूरी बात याद नहीं है। आप सब कुछ नहीं जान सकते, लेकिन आप सब कुछ google कर सकते हैं।

\uअपने प्रोग्राम में इसके कोड का उपयोग करके एक यूनिकोड वर्ण लिखने के लिए, आपको + कोड को हेक्साडेसिमल में लिखना होगा । उदाहरण के लिए,\u00A9

कोड कंसोल आउटपुट
System.out.println("\u00A9 CodeGym");
© CodeGym


5. यूनिकोड: कोड प्वाइंट

"640 किलोबाइट सभी के लिए पर्याप्त होना चाहिए! या नहीं"। (उद्धरण बिल गेट्स को जिम्मेदार ठहराया)

जीवन कठिन है, और समय के साथ, UTF-16 एन्कोडिंग अपर्याप्त होने लगी। यह पता चला है कि बहुत सारी एशियाई भाषाएँ हैं, और उनके पास बहुत सारे ग्लिफ़ हैं। और इन सभी ग्लिफों को केवल 2 बाइट्स में नहीं भरा जा सकता है।

क्या किया जा सकता है? अधिक बाइट्स का प्रयोग करें !

लेकिन चार प्रकार केवल 2 बाइट्स है और इसे 4 में बदलना इतना आसान नहीं है: पूरी दुनिया में जावा कोड की अरबों पंक्तियाँ लिखी गई हैं, जो कि चार प्रकार की जावा मशीन अचानक 4 बाइट्स बन जाने पर टूट जाएगी। इसलिए हम चार प्रकार नहीं बदल सकते!

एक और तरीका है। याद रखें कि कैसे हम पात्रों के सामने बैकस्लैश लगाकर उनसे बचते हैं। मूल रूप से, हमने एक ही वर्ण को कई वर्णों का उपयोग करके एन्कोड किया है।

जावा के रचनाकारों ने उसी दृष्टिकोण का उपयोग करने का निर्णय लिया।

कुछ वर्ण जो नेत्रहीन रूप से एक वर्ण के रूप में दिखाई देते हैं, उन्हें charएक स्ट्रिंग में दो एस के रूप में एन्कोड किया गया है:

कोड कंसोल आउटपुट
System.out.println("\uD83D\uDD0A");
🔊

अब आपका जावा प्रोग्राम कंसोल 😎 में इमोजी भी आउटपुट कर सकता है