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 একটি পৃষ্ঠা ফিড অক্ষর সন্নিবেশ
\' একটি একক উদ্ধৃতি চিহ্ন সন্নিবেশ করান
\" একটি ডবল উদ্ধৃতি চিহ্ন সন্নিবেশ করান
\\ একটি ব্যাকস্ল্যাশ ঢোকান

আপনি তাদের দুজনের সাথে পরিচিত, কিন্তু অন্য 6টির অর্থ কী?

\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 অক্ষর পর্যন্ত মিটমাট করতে পারে!

আপনি এই এনকোডিং-এ বিশ্বের প্রতিটি বর্ণমালার প্রায় প্রতিটি অক্ষর খুঁজে পেতে পারেন। স্বাভাবিকভাবেই, পুরো জিনিসটি কারও মুখস্থ নেই। আপনি সবকিছু জানতে পারবেন না, তবে আপনি সবকিছু গুগল করতে পারেন।

আপনার প্রোগ্রামের কোড ব্যবহার করে একটি ইউনিকোড অক্ষর লিখতে, আপনাকে \u+ কোডটি হেক্সাডেসিমেলে লিখতে হবে । উদাহরণ স্বরূপ,\u00A9

কোড কনসোল আউটপুট
System.out.println("\u00A9 CodeGym");
© CodeGym


5. ইউনিকোড: কোড পয়েন্ট

"640 কিলোবাইট প্রত্যেকের জন্য যথেষ্ট হওয়া উচিত! বা না"। (উদ্ধৃতি বিল গেটসের জন্য দায়ী)

জীবন রুক্ষ, এবং সময়ের সাথে সাথে, UTF-16 এনকোডিং অপর্যাপ্ত হতে শুরু করে। দেখা যাচ্ছে যে প্রচুর এশিয়ান ভাষা রয়েছে এবং তাদের প্রচুর গ্লিফ রয়েছে। এবং এই সমস্ত গ্লিফগুলিকে কেবল 2 বাইটে বিভক্ত করা যায় না।

কি করা যেতে পারে? আরো বাইট ব্যবহার করুন !

কিন্তু char টাইপ মাত্র 2 বাইট এবং এটিকে 4 তে পরিবর্তন করা এত সহজ নয়: সারা বিশ্ব জুড়ে জাভা কোডের বিলিয়ন লাইন লেখা হয়েছে, যেটি যদি হঠাৎ করে 4 বাইট জাভা মেশিনে 4 বাইট হয়ে যায় তাহলে তা ভেঙে যাবে। তাই আমরা চর টাইপ পরিবর্তন করতে পারি না!

আরেকটি পদ্ধতি আছে। মনে রাখবেন কিভাবে আমরা অক্ষরদের সামনে ব্যাকস্ল্যাশ রেখে পালিয়ে যাই। মূলত, আমরা একাধিক অক্ষর ব্যবহার করে একটি একক অক্ষর এনকোড করেছি।

জাভা নির্মাতারা একই পদ্ধতি ব্যবহার করার সিদ্ধান্ত নিয়েছে।

কিছু অক্ষর যা দৃশ্যত একটি একক অক্ষর হিসাবে উপস্থিত হয় সেগুলি charএকটি স্ট্রিংয়ে দুটি s হিসাবে এনকোড করা হয়:

কোড কনসোল আউটপুট
System.out.println("\uD83D\uDD0A");
🔊

এখন আপনার জাভা প্রোগ্রাম কনসোলে ইমোজি আউটপুট করতে পারে 😎