জাভাঃ String ক্লাসের গল্প

জাভা String ক্লাস বোধহয় জাভার বহূল ব্যাবহৃত ক্লাস।  প্রোগ্রামের চিপা-চাপা প্রায় সব জায়গাতে আপনি এই ভদ্রলোককে খুজে পাবেন। চিন্তা করুন, প্রোগ্রামে যত বার String ব্যাবহার করেছেন আপনার মাথায় ততগুলো চুল আছে?

String ক্লাস হচ্ছে জাভার java.lang প্যাকেজের সদস্য। এই ক্লাস "ক্যারেক্টার স্ট্রিং" কে রিপ্রেজেন্ট করে।

কিভাবে String ক্লাসের অবজেক্ট বানাব?

String যেহেতু ক্লাস। যত গুলো স্ট্রিং আপনি প্রোগ্রামে ডিক্লেয়ার করেন তারা এই ক্লাসের অবজেক্ট। যেমন এখানে ("letters" , "the quick brown") দুইটি String ক্লাসের অবজেক্ট আছে।

আমরা new অপারেটর ব্যাবহারের মাধ্যমে, এ্যাসাইনমেন্ট অপারেটরের(=) মাধ্যমে বা কোটেশনের ("") মাধ্যমে String ডিক্লেয়ার করতে পারি। যেমনঃ

String str1 = new String("good boy");
String str2 = "bad boy";
System.out.println("Hello world!");
আপনি overloaded কনস্টাক্টরের মাধ্যমেও String ডিক্লেয়ার করতে পারেন। যেমনঃ
String str1 = new String( "John Snow" );
char[] name = new char[]{ 'J', 'o', 'h', 'n', ' ', 'S', 'n', 'o', 'w' };
String lordCommander = new String( name );
(String কনস্ট্রাক্টর,  যেটি Character Array কে প্যারামিটার হিসেবে নেয়)
StringBuilder sb = new StringBuilder( "String Builder" );
String str1 = new String( sb );
(String কনস্ট্রাক্টর,  যেটি StringBuilder অবজেক্ট কে প্যারামিটার হিসেবে নেয়)
StringBuffer  sbf = new StringBuffer( "String Buffer" );
String str2= new String( sbf );
(String কনস্ট্রাক্টর,  যেটি StringBuffer অবজেক্ট কে প্যারামিটার হিসেবে নেয়)

String ক্লাস immutable?
হ্যাঁ String ক্লাস immutable। এটি মনে রাখার মত একটি পয়েন্ট। ভূলবেন না কিন্তু। immutable বলতে বুঝায় একবার অবজেক্ট তৈরী হয়ে যাওয়ার পর এর কন্টেন্ট কোনো ভাবে পরিবর্তন করা যাবে না। যেমনঃ
String str1= "winter is coming";
অবজেক্ট str1 এর কন্টেন্ট "winter is coming" এর কোনো একটি ক্যারেক্টার কোনো ভাবেই replace/remove কোনো কিছুই করা যাবে না, কোনো modification সম্ভব না।

আপনি বলতে পারেন String ক্লাসের তো replace(), concat(), remove(), toUpper(), toLower() ইত্যাদি ইত্যাদি মেথড আছে।  এগুলো স্ট্রিং অবজেক্টের কন্টেন্টকে modify করে না, তারা আপনার স্ট্রিং অবজেক্ট থেকে নতুন একটি অবজেক্ট বানায় এবং সেটি রিটার্ণ করে।
String  s1= "hello world";
String s2 = s1.replace( "world", "WORLD" );
System.out.println( s1 );  // this will print hello world
System.out.println( s1 );  // this will print hello WORLD
এখানে ছবিতে String ক্লাসের মেথড গুলোকে বিভিন্ন ক্যাটাগরিতে ভাগ করা হয়েছে যাতে আপনি আরো ভাবে মেথডগুলোর অপারেশন বুঝতে পারেন।

charAt():
আপনি charAt(int index) এই মেথডের মধ্যমে index পজিশনের ক্যারেকক্টার
retrive করতে পাববেন। যেমনঃ
String name = new String( "John Poul" );
System.out.println( name.charAt( 0 ) );
জিরো(0) পজিশনে ক্যারেক্টার আছে J, এই স্টেটমেন্ট সেটি প্রিন্ট করবে। একইভাবে নীচের স্টেটমেন্ট u প্রিন্ট করবেঃ
System.out.println( name.charAt(7) )
কারণ 7 ইনডেক্সে আছে u

substring():
substring() মেথড দুই ধরনের কাজ করতে পারে। প্রথমটি হচ্ছে আপনি একটি পজিশন উল্লেখ করে দিলেন। substring() মেথড ঐ পজিশন থেকে String এর শেষ পর্যন্ত নিয়ে একটি String রিটার্ণ করবে।

আরেকটি হচ্ছে আপনি শুরুর এবং শেষের পজিশন উল্লেখ করে দিলেন, substring() মেথড শুরুর index এর character থেকে শেষের index এর আগ পর্যন্ত String রিটার্ণ করবে। যেমনঃ
String exam = "Oracle";
String sub = exam.substring( 2 );
System.out.println( sub ); // this will print acle
String exam = "Oracle";
String result = exam.substring( 2, 4 );
System.out.println( result ); // this will print ac
মনে রাখবেন দ্বিতীয় ক্ষেত্রে ২য় প্যারামিটারের আগের index এর ক্যারেক্টার পর্যন্ত নিয়ে Sub String রিটার্ণ করবে।

trim():
trim() মেথড String এর আগের ও পরের স্পেস remove করে বাকী String রিটার্ণ করবে। যেমনঃ
String var = "   john denver   ";
System.out.print( ":" )
System.out.print( var ) ;
System.out.print( ":" )
আউটপুট হবে :   john denver   :

আমরা যদি trim() মেথড এ্যাপ্লাই করি
String var = "   john denver   ";
System.out.print( ":" )
System.out.print( var.trim() ) ;
System.out.print( ":" )
আউটপুট হবে :john denver: 

replace():
এই মেথড কোনো String থেকে কোনো একটি ক্যারেক্টারকে অন্য একটি ক্যারেক্টার দিয়ে replace করে String টি রিটার্ণ করবে। ক্যারেক্টারের পরিবর্তে "সিকুয়েন্স অফ ক্যারেক্টার" কে আরেকটি "সিকুয়েন্স অফ ক্যারেক্টার" replace করবে।যেমনঃ
String word = "INTANGIBLE";
System.out.println( word.replace('G', 'g') ); //this will print INTANgIBLE
System.out.println( word.replace('TANG', 'tang') ); // this will print INtangIBLE
মনে রাখবেন প্যারামিটার দুটি হয় ক্যারেক্টার অথবা "সিকুয়েন্স অফ ক্যারেক্টার" হতে হবে। দুটি দুই রকমের হলে কম্পাইল হবে না। যেমন নীচের দুটি প্রিন্ট স্টেটমেন্ট কম্পাইল হবে না।
String letters = "ABCBA";
System.out.println(letters. replace('B', "b") );
System.out.println( letters.replace("B", 'b') );
আরেকবার বলছি মেথড নতুন একটি String রিটার্ণ করছে, আমাদের আগের String আগের মতই আছে। যেমনঃ
System.out.println( letters );
এটি ABCBA প্রিন্ট করবে।

length() :
lenght() মেথড String এর দৈর্ঘ্য রিটার্ণ করবে। String এর দৈর্ঘ্য তার শেষ index নাম্বারের চেয়ে ১ বেশি হয়। যেমনঃ
System.out.println("ali ashik".length() );
এটি 9 প্রিন্ট করবে।

startsWith() এবং endsWith():
startsWith() মেথড চেক করে একটি String একটি নির্দিষ্ট prefix দিয়ে শুরু হয় কিনা? যদি শুরু হয় তাহলে এটি true রিটার্ণ  করবে, নইলে false রিটার্ণ করবে। prefix টি আপনি প্যারামিটারে প্রোভাইড করে দিবেন।

মনে রাখবেন এই চেকিং শুরু হবে জিরো (0) index থেকে। আপনি ইচ্ছা করলে চেকিং কোন index থেকে শুরু হবে সেটি নির্দিষ্ট করে দিতে পারেন। যেমনঃ
String letters = "ABCAB";
System.out.println(letters.startsWith("AB")); // this will print true
System.out.println(letters.startsWith("a")); // this will print false 
System.out.println(letters.startsWith("A", 3) ); // cheching form index 3 
endsWith() মেথড চেক করে একটি String একটি নির্দিষ্ট suffix দিয়ে শেষ হয় কিনা? যদি শেষ হয় তাহলে এটি true রিটার্ণ  করবে, নইলে false রিটার্ণ করবে। যেমনঃ
String letters = "ABCAB"
System.out.println( letters.endsWith("CAB") );
System.out.println( letters.endsWith("B") );
System.out.println( letters.endsWith("b", 3) );
একটু খেয়াল করে, startsWith() এবং endsWith() এ প্যারামিটার সবসময় String কিন্তু Character না।

আজকে এই পর্যন্ত। বিদায়, টাটা। আপনাদের জন্য দুইটা কাজ রেখেছি। নীচে দেখুন।

কাজ-১ঃ
নীচের কোড দেখি। এটাকে বলা হয় method chainingExecution বাম থেকে শুরু হয় ডানে যাবে।
আউটপুট কি?
String result = "Sunday   ".replace( ' ', 'z' ).trim().concat( "M n" );
কাজ-২ঃ
নীচের কোডের জন্য কোনটি সঠিক?
String letters = "ABCAB";
System.out.println( letters.substring(0,2) ).startsWith( 'A' );
(a) true(b) false
(c) AB(d) ABC
(e) Compilation error
 class MyClass{
}